我一直在使用$ compile服务来动态注入一个元素,但只是被意外的事情打败了。所以,这是我以前注入指令的方式:
angular
.module('app', [])
.directive('test', function () {
return {
restrict: 'E',
controller: function () {
console.log('hey, just got compiled!')
}
}
})
.run(function ($compile, $rootScope) {
var $scope = $rootScope.$new()
var directive = $compile('<test></test>')($scope)
var app = angular.element(document.querySelector('[ng-app]'))
app.append(directive)
})
在这个fiddle中,您可以看到该指令似乎被编译了两次。所以我删除了$ compile技巧,它工作正常,指令编译一次:
angular
.module('app', [])
.directive('test', function () {
return {
restrict: 'E',
controller: function () {
console.log('hey, just got compiled!')
}
}
})
.run(function ($compile, $rootScope) {
var app = angular.element(document.querySelector('[ng-app]'))
app.append('<test></test>')
})
那么,.append
编译指令吗?
我有点困惑,因为我总是看到第一个版本作为推荐版本,我在jqLike的“追加”实现中找不到与编译有关的任何内容。
答案 0 :(得分:1)
这是因为run
阶段在第一次编译DOM之前发生。它与使用append()
此用例不需要您在$compile
中使用的run()
。