的錯誤,你得到的是$interpolate:noconcat
。它規定:
嚴格上下文轉義不允許在需要信任值時連接多個表達式的插值。 Source。
這意味着您必須使用$sce並將所需的URL標記爲trusted。 這將解決您的問題:
angular
.module('myApp', [])
.controller('MainCtrl', function($sce) {
this.youtubeLink = $sce.trustAsResourceUrl('https://www.youtube.com/embed/N4ony2r0QFs');
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.3/angular.min.js"></script>
<div ng-app="myApp" ng-controller="MainCtrl as vm">
<iframe width="560" height="315" ng-src="{{ vm.youtubeLink }}" frameborder="0" allowfullscreen></iframe>
</div>
另一種方式,如this answer表示,將創造出專門建立信任YouTube網址自定義過濾器:
.filter('youtubeEmbedUrl', function ($sce) {
return function(videoId) {
return $sce.trustAsResourceUrl('https://www.youtube.com/embed/' + videoId);
};
});
您可以隨時使用此過濾器來嵌入視頻,例如:ng-src="{{ vm.youtubeLink | youtubeEmbedUrl }}"
。
「不工作」是什麼意思? – Claies