Javascript 安格拉斯DOM注射
如果我提前向AngularJS注册了一个面向元素的指令,那么我是否可以直接向DOM(例如通过Javascript 安格拉斯DOM注射,javascript,angularjs,Javascript,Angularjs,如果我提前向AngularJS注册了一个面向元素的指令,那么我是否可以直接向DOM(例如通过document.appendChild)注入一个与该指令元素匹配的节点(例如),AngularJS将在其位置呈现该指令(可能需要手动摘要触发器) 我的指令模板.html <div> hello world </div> 角度配置: //... angular.directive('my-directive-name', require('my-directive
document.appendChild
)注入一个与该指令元素匹配的节点(例如
),AngularJS将在其位置呈现该指令(可能需要手动摘要触发器)
我的指令模板.html
<div>
hello world
</div>
角度配置:
//...
angular.directive('my-directive-name', require('my-directive-name'))
//...
<body></body>
<body>
<my-directive-name my-attribute='foo'>
</my-directive-name>
</body>
<body>
<div>
hello world
</div>
</body>
启动DOM:
//...
angular.directive('my-directive-name', require('my-directive-name'))
//...
<body></body>
<body>
<my-directive-name my-attribute='foo'>
</my-directive-name>
</body>
<body>
<div>
hello world
</div>
</body>
然后动态附加一个子节点:
//...
angular.directive('my-directive-name', require('my-directive-name'))
//...
<body></body>
<body>
<my-directive-name my-attribute='foo'>
</my-directive-name>
</body>
<body>
<div>
hello world
</div>
</body>
然后我做一些事情让Angular意识到有些事情已经改变了(这是什么?):
结束DOM:
//...
angular.directive('my-directive-name', require('my-directive-name'))
//...
<body></body>
<body>
<my-directive-name my-attribute='foo'>
</my-directive-name>
</body>
<body>
<div>
hello world
</div>
</body>
你好,世界
在添加元素之前,需要对元素进行$compile
编译。这里有一个小问题:
重复问题:在将元素添加到DOM之前,您需要确保先添加元素。下面是一个简单的示例,演示如何在angular代码之外使用$compile函数(通过setTimeout)添加到DOM
(函数(角度){
angular.module('myApp',[])
.指令(“myDirectiveName”,myDirectiveName);
函数MyDirectiveName(){
返回{
限制:'E',
模板:“{myAttr}}作为我的属性的自定义指令”,
范围:{
myAttr:“@myAttribute”
}
};
}
//稍后再运行。
setTimeout(函数(){
var appDiv=angular.element(document.getElementById('app');
//让注入器编译
var$injector=appDiv.injector();
var$compile=$injector.get(“$compile”);
//编译新元素
var barLink=$compile(angular.element(“”));
var bazLink=$compile(angular.element(“”));
//通过链接作用域来追加这两个元素
appDiv.append(条链接(appDiv.scope());
appDiv.append(bazLink(appDiv.scope());
}, 3000);
}(角度);
你能发布简单的例子和所需的结果吗?我认为使用ng if
应该很容易,但我可能不太明白你想要做什么。可能的重复一点也不觉得有棱角。我每天至少评论一篇关于angular的帖子,说同样的话。这与angular的目的背道而驰在极端边缘情况下操作DOM。在angular中,您应该针对数据而不是DOM进行编码。@Claies请指出,如果要呈现的指令事先不知道,并且不能满足您的“感觉有角度”要求,那么如何将其呈现到DOM AngularJS指令中。我甚至不确定我是否理解您在评论中提出的问题,但我使用了ng if
、ng show
、ng repeat
等模板和组合,在大量项目中根据数据类型呈现内容。我无法为假设的“我不知道它提前了什么”提供解决方案键入问题;为什么您不提前知道应用程序流程中的某个地方?毕竟,您不会让用户选择他们希望在页面上呈现的HTML。。。。