Javascript AngularJS ng bind html似乎没有更新DOM
这是正在发生的事情的一个基本例子。HTML绑定实际上工作得很好。我甚至可以提醒$scope.testDocument并获取最新更新的内容。但是,如果我尝试选择任何使用指令绑定的新插入HTML元素,它总是返回0长度。与jQuery所需的DOM是否存在某种关系 HTML代码片段Javascript AngularJS ng bind html似乎没有更新DOM,javascript,jquery,angularjs,Javascript,Jquery,Angularjs,这是正在发生的事情的一个基本例子。HTML绑定实际上工作得很好。我甚至可以提醒$scope.testDocument并获取最新更新的内容。但是,如果我尝试选择任何使用指令绑定的新插入HTML元素,它总是返回0长度。与jQuery所需的DOM是否存在某种关系 HTML代码片段 <form> <button id="myButton" type="button" ng-click="testUpdate()">Test Update</button> &l
<form>
<button id="myButton" type="button" ng-click="testUpdate()">Test Update</button>
</form>
<div ng-bind-html="testDocument" id="testDocument"></div>
$scope.testDocument = $sce.trustAsHtml("<div>My HTML.</div>");
$scope.testUpdate = function() {
$scope.testDocument = $sce.trustAsHtml("<div><span class='test-new-element'>My HTML.</span></div>");
alert($(".test-new-element").length);
}
我在$rootScope.Scope上读到的关于这个主题的文档可以在$watch函数中找到。您需要等待角度摘要循环完成,直到它完成,DOM才被更新。最简单的解决方案(尽管有点黑)是将其包装在
$timeout
中:
$timeout(function() { alert($(".test-new-element").length); });
IME如果您正确使用数据绑定,您几乎不需要使用jQuery来选择元素。与示例不同,HTML的内容实际上非常大。我正在选择/高亮显示文本,但一些高亮显示的文本已超过DIV的可视区域,因此我需要将DIV向下滚动到高亮显示元素的位置。这是jQuery的核心功能。谢谢@dave,就是这样。你能告诉我是否有一个摘要侦听器,我可以附加回调,这样我就不需要超时吗?我似乎找不到与《文摘》周期有多大关系。我在回答上述评论的问题中添加了一些细节。
$timeout(function() { alert($(".test-new-element").length); });