Angularjs 不执行动态创建的指令
Plnkr样本:[ 这可能不是正确的“角度”实现这一点的方法,但不幸的是,我正在使用一些我更改能力有限的第三方库。我正在尝试动态创建一个Angle指令并将其添加到页面中。该过程是有效的,至少在将directive元素添加到DOM的意义上是有效的,但实际上它并没有执行-它只是一个dumb在这一点上 相关代码如下:Angularjs 不执行动态创建的指令,angularjs,angularjs-directive,Angularjs,Angularjs Directive,Plnkr样本:[ 这可能不是正确的“角度”实现这一点的方法,但不幸的是,我正在使用一些我更改能力有限的第三方库。我正在尝试动态创建一个Angle指令并将其添加到页面中。该过程是有效的,至少在将directive元素添加到DOM的意义上是有效的,但实际上它并没有执行-它只是一个dumb在这一点上 相关代码如下: <div ng-app="myModule"> <div dr-test="Static Test Works"><
<div ng-app="myModule">
<div dr-test="Static Test Works"></div>
<div id="holder"></div>
<a href="#" onclick="addDirective('Dynamic test works')">Add Directive</a>
</div>
var myModule = angular.module('myModule', []);
myModule.directive('drTest', function () {
console.log("Directive factory was executed");
return {
restrict: 'A',
replace: true,
link: function postLink(scope, element, attrs) {
console.log("Directive was linked");
$(element).html(attrs.drTest);
}
}
});
function addDirective(text){
console.log("Dynamically adding directive");
angular.injector(['ng']).invoke(['$compile', '$rootScope',function(compile, rootScope){
var scope = rootScope.$new();
var result = compile("<div dr-test='"+text+"'></div>")(scope);
scope.$digest();
angular.element(document.getElementById("holder")).append(result);
}]);
}
</script>
div ng app=“myModule”
div dr test=“静态测试工作”>/div
div id=“持有人”>/div
a href=“#”onclick=“addDirective('Dynamic test works')”添加指令/a
/div
var myModule=angular.module('myModule',[]);
myModule.directive('drTest',function(){
log(“执行了指令工厂”);
返回{
限制:“A”,
替换:正确,
链接:函数postLink(范围、元素、属性){
log(“指令被链接”);
$(element.html(attrs.drTest);
}
}
});
函数addDirective(文本){
log(“动态添加指令”);
angular.injector(['ng'])。调用(['$compile','$rootScope',函数(compile,rootScope){
var scope=rootScope.$new();
var结果=编译(“”)(范围);
范围。$digest();
元素(document.getElementById(“holder”)).append(结果);
}]);
}
/剧本
在将指令附加到DOM时,您也需要在注入器中使用模块调用指令,因为指令drTest
仅在您的模块下可用,因此在创建注入器时,除了添加ng
之外,还需要添加模块。而且您实际上不需要执行范围应用,因为元素是alrea使用作用域进行编译。您还可以删除冗余的$(元素)
angular.injector(['ng','myModule'])。调用(['$compile','$rootScope',函数(compile,rootScope){
var scope=rootScope.$new();
var结果=编译(“”)(范围);
元素(document.getElementById(“holder”)).append(结果);
}]);
完美!我知道我错过了什么(回想起来)。泰克斯
angular.injector(['ng', 'myModule']).invoke(['$compile', '$rootScope',function(compile, rootScope){
var scope = rootScope.$new();
var result = compile("<div dr-test='"+text+"'></div>")(scope);
angular.element(document.getElementById("holder")).append(result);
}]);