未编译angular指令中新添加的元素
Newly added elements from angular directive not getting compiled
我根据要求用一些div
标签包装了我的input
标签。现在的问题是,div
标记的类按角度动态变化,但这个新添加的div
似乎没有被编译,因此,它在页面上显示(在浏览器的视图源中看到)与我添加它完全一样。如果我直接在页面上而不是从指令添加它,通常不会发生任何变化。
我也尝试在这个div
中添加{{ name }}
,但它也不打印名称属性,而直接在页面上添加它,确实有效。这给了我一个结论,即新添加的div
没有得到正确编译。
我是这样从html打电话的,
<!-- ag-textbox is my directive -->
<input ag-textbox ag-grid-class="col-md-4" class="form-control" id="age" type="text" ag-name="Age" ng-model="age" ag-formname="newform" required />
我在js中的代码是
var fDiv = angular.element("<div class='" + agGridClass + "' "
+ "ng-class={'has-error':" + agFormName + "." + agName + ".$invalid}>");
element.wrap(fDiv);
$compile(element.contents())(scope);
当我不使用wrap()
功能时,它正在工作,如下所示:
element.html('').append(firstDiv + inputText + otherDiv);
$compile(element.contents())(scope);
这很好,但现在我的要求不同了,我必须包装现有的input
标签,所以必须使用wrap()
函数。
我试过$compile(element)(scope)
和$compile(element.html())(scope)
,但它们都不起作用。有什么方法可以编译新添加的组件吗?
调用.wrap()
后,element
仍然是对原始DOM元素的引用,其中不包括它所封装的div。因此,当您编译element
时,封装的div不会被编译。
假设fDiv
是一个简单的div,您可以尝试使用.parent()
将其包含在编译中。。。
element.wrap(fDiv);
$compile(element.parent().contents())(scope);
编辑。。。
fDiv在ng类属性中似乎缺少"
s,需要一个关闭的</div>
标记。。。
var fDiv = angular.element("<div class='" + agGridClass + "' "
+ "ng-class='"{'has-error':" + agFormName + "." + agName + ".$invalid}'"></div>");
相关文章:
- JQuery添加元素需要在我的js之前再次添加JQuery脚本
- 如何使用jquery遍历具有动态添加元素的数组
- jQuery appendTo 替换元素而不是添加元素,如果正在添加的元素预先存在于列表中
- 如何使用jquery添加元素
- 动态添加元素上的 HammerJS
- CSS没有'使用javascript向页面动态添加元素时无法工作
- 使用Javascript在DOM元素中添加元素
- 在添加元素时激发JS事件
- 什么's是在IE8+中添加元素的最有效方法
- d3.js在添加元素时协调
- 使用路由器链接动态添加元素
- 动态添加元素
- 在页面内容完全加载后,使用jQuery在DOM中添加元素
- j查询绑定单击不添加元素
- 在循环 jQuery 上添加元素
- 从一个页面调用 javascript 函数以在第二个页面上添加元素
- 页面加载后向<正文>添加元素时出现问题
- 动态添加元素时刷新 HTML
- 动态添加元素时不触发 JQuery 事件
- 如何使用 JavaScript 获取动态添加元素的宽度