Javascript Angularjs$编译函数的第二个和第三个参数是什么

Javascript Angularjs$编译函数的第二个和第三个参数是什么,javascript,angularjs,Javascript,Angularjs,我有这个例子 <div ng-controller="MyCtrl"> <div compile-template ng-bind-html="post"></div> </div> 如果我将其设置为$compile(element)($scope),它将不再工作 为什么呢 这是小提琴 的第三个参数是maxPriority。发件人: 仅应用低于给定优先级的指令(仅影响根目录 元素,而不是其子元素) 当您像$compile(element,

我有这个例子

<div ng-controller="MyCtrl">
    <div compile-template ng-bind-html="post"></div>
</div>
如果我将其设置为
$compile(element)($scope)
,它将不再工作

为什么呢

这是小提琴

的第三个参数是
maxPriority
。发件人:

仅应用低于给定优先级的指令(仅影响根目录 元素,而不是其子元素)

当您像
$compile(element,null,-9999)($scope)那样运行它时,您告诉编译器跳过
元素上优先级大于
-9999
的所有指令。这就是为什么
compileTemplate
指令不会“自编译”,因为默认优先级为0,并且不会运行两次,因为:

此指令以优先级0执行

删除第三个参数时,将再次编译和链接。同样的事情也会发生在
compileTemplate
指令上。由于您已经设置了一个
$watch
,并且在其中调用了
$compile
,您将得到

[$rootScope:infdig]已达到10$digest()迭代次数。流产

无限“自编译”导致错误。这就是所谓的问题之一

第二个参数是(它在您的案例中不起任何作用,因为它作为
null
传递):

指令可用的函数-已弃用

angular.module('myApp',[])

.controller('MyCtrl', function($scope, $sce,$timeout) {
    $scope.name = 'World';
    $scope.post = $sce.trustAsHtml("<h1>hello {{name}}</h1>");
    $timeout(function(){
     $scope.name = "3333";
    },3000);
});

angular.module("myApp").directive('compileTemplate', ["$compile", "$parse", function($compile, $parse) {
    return {
        restrict: 'A',
        link: function($scope, element, attr) {
            var parse = $parse(attr.ngBindHtml);
            function value() { return (parse($scope) || '').toString(); }

            $scope.$watch(value, function() {
                $compile(element, null,-9999)($scope); 
            });
        }
    }
}]);      
$compile(element, null,-9999)($scope);