在Angular引导后向DOM中添加一个指令
Adding a directive to the DOM after Angular bootstrap
我试图在Angular启动后向DOM添加一些指令。如果我在运行块中这样做,它会完美地工作,但是如果我添加延迟,则不会显示指令。看看我的小提琴,你就能明白我的意思了:https://jsfiddle.net/wLddmctp/
var app = angular.module("myApp", ["docsSimpleDirective"]);
app.run(function ($timeout) {
$timeout(function () {
var container = document.getElementById("container");
var box = document.createElement("div");
box.innerHTML = "<div my-customer></div>";
container.appendChild(box);
}, 3000);
});
谁能解释一下这是什么原因,以及如何解决这个问题?
谢谢
你需要手动编译新的HTML,因为如果你在timeout中使用它,Angular已经完成了解析和渲染。
所以你需要使用正确作用域的$compile
服务。
var scope = angular.element(container).scope();
$compile(box)(scope);
演示:https://jsfiddle.net/wLddmctp/1/
话虽这么说,但您可以看到,使用$compile
,特别是获得适当的元素作用域,代码变得有点笨拙。我建议使用自定义服务/指令来动态注入HTML,运行块不是理想的地方。
相关文章:
- 打开一个模态并将其链接到AngularJS中的指令
- 从html创建一个指令,该指令按类名应用函数
- 指令的模板必须只有一个根元素:With restrict E&替换true
- Angular Datetimepicker:指令'的模板;uib时间选择器'必须只有一个根元素
- 如何在另一个组件中获取指令/组件实例
- 一次显示一个隐藏指令-AngularJS
- 一次显示一个指令AngularJS
- AngularJS中多个指令的一个声明
- 如何使用其他自定义指令中的元素标记作为另一个自定义指令的模板
- 调用另一个自定义指令的角度自定义指令
- 在 Angular 指令中定义一个用于 ng-click 的函数
- AngularJs 从指令中的另一个调用控制器
- ng-repeat始终呈现为指令模板中的最后一个
- 如果指令包含在另一个指令中,我如何在隔离范围内添加双向数据绑定属性
- angularjs在一个元素上有两个指令
- 测试依赖于另一个指令Angularjs的指令
- 测试一个简单的指令
- 如何在angularjs中访问一个指令作用域值到另一个指令
- 创建一个模态指令,并将click事件绑定到angular js中
- 给angular指令一个模型名称以访问它's在父级中的作用域