背景
$compile
您可以在使用该方法引导您的 Angular 应用程序后调用angular.injector
。
angular.injector(['ng', 'late']).invoke(function($rootScope, $compile) {
$compile(myElement)($rootScope)
}
这适用于我在late
模块上创建的指令,但不会调用我的任何ng-bind
.
例子
我在一个与我需要编译的元素不同的元素上初始化了 Angular 应用程序。
<div ng-app="test">
</div>
<div id="uncompiled">
{{ $id }}
<div ng-controller="LateController as cont">
{{ $id }} {{ "5" }} {{ cont.clicked }}
<div late-directive="5"></div>
</div>
</div>
然后,一旦 angular 完成引导,我为应该稍后编译的元素创建模块和指令。
angular.element(document).ready(function() {
angular.module('late', [])
angular.module('late').controller('LateController', function($scope) {
console.log('Make controller', $scope)
$scope.lateController = true
this.clicked = 6
})
angular.module('late').directive('lateDirective', function() {
console.log('Make directive')
return {
restrict: 'A',
template: '<span>INNEREST {{ $id }}</span> COMPILED LATE!!! {{ $id }} {{ cont.clicked }}',
}
})
angular.injector(['ng', 'late']).invoke(function($compile, $rootScope) {
console.log('Injecting')
var el = angular.element(document.getElementById('uncompiled'))
$compile(el)($rootScope)
})
})
如果您注意到,所有的{{ }}
ng-binds 都不会被替换,而是指令模板 ( lateDirective
) 被插入到文档中。
问题
为什么有些指令有效而有些指令无效?
如何让所有指令在延迟内正常工作$compile
?