Javascript AngularJS不编译脚本标记内的表达式
我尝试用..编译HTML模板。。但AngularJS编译器不会编译标记中的所有表达式 我的控制器:Javascript AngularJS不编译脚本标记内的表达式,javascript,angularjs,Javascript,Angularjs,我尝试用..编译HTML模板。。但AngularJS编译器不会编译标记中的所有表达式 我的控制器: .controller('showChannelController', function ($scope, $http, $stateParams, $compile, $templateRequest) { $http.get("http://localhost/show?id=" + $stateParams.id) .then(function (r
.controller('showChannelController', function ($scope, $http, $stateParams, $compile, $templateRequest) {
$http.get("http://localhost/show?id=" + $stateParams.id)
.then(function (response) {
$scope.info = response.data.data;
$templateRequest('application/script.html').then(function(template) {
$('body').append($compile(template)($scope));
});
});
});
我的application/script.html模板如下所示:
<script>
$(function() {
// Load Player
var player = new Clappr.Player({
source: "{{source_url}}",
parentId: "#player",
autoPlay: true,
width: 962,
height: 540,
});
});
</script>
是否可以在不包含后端的情况下解决此问题?在加载jQuery的模板中使用标记是可能的,它可以替换Angular jqLite实现,并以不同的方式对待脚本节点
但在脚本中不可能使用角度表达式。这将是一个巨大的安全漏洞,因为这需要使用eval执行任意代码
它可以是包含上述代码的指令
app.directive('player', () => ({
scope: { url: '@' },
link: (scope, element, attrs) => {
scope.id = Math.round(Math.random()*10e4);
attrs.$set('id', 'player-' + scope.id);
scope.instance = new Clappr.Player({
source: scope.url,
parentId: '#' + scope.id,
...
});
}
}));
这取决于Clappr.Player如何允许提供父元素。如果它接受DOM元素作为父元素,则可以提供$element[0],而不是'parentId实现后端版本,只需在服务器端生成包含所有所需参数的脚本,并将完整脚本传输到AngularJS。然后在AngularJS控制器中应用接收到的数据
$('body').append($compile(response.data.script)($scope));
不要用括号。使用变量。 它应该直接起作用。 使用$rootScope传递变量的值。这里使用$rootScope,因为它在所有应用程序中都很常见 这是一个例子
angular.module('tss.application').controller('VideoController',function($log, $rootScope, $scope, $window ) {
var player = new Clappr.Player({
source: $rootScope.vp,
parentId: "#player",
autoPlay: true
});
});
我在video_modal.html中使用这个控制器——这是一个弹出模式,播放器在其中打开。根据用户的点击/选择,视频源是动态的
<div ng-controller="VideoController">
<div id="player"></div>
</div>
如果脚本在ng视图中,那么应该在index.html文件中的AngularJS之前调用Jquery。顺便说一句,这必须是一个重复的脚本位于application/script.html中。你能给我举个例子吗?你可以用jQuery技巧在模板中执行标记,如果没有它,它们根本不会执行,但是你不能在那里使用表达式,这将是一个巨大的安全漏洞,因为这是纯评估。别那么做。改为创建一个播放器指令。在index.html中,有一些标记调用AngularJS库?你必须拥有它才能拥有angularJS。Jquery也应该有一个,然后注意在角度标记之前调用Jquery标记,但是当然,正如estus所说,这不是角度标记的方式这里有一些例子