Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/402.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript AngularJS不编译脚本标记内的表达式_Javascript_Angularjs - Fatal编程技术网

Javascript 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

我尝试用..编译HTML模板。。但AngularJS编译器不会编译标记中的所有表达式

我的控制器:

.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所说,这不是角度标记的方式这里有一些例子