AngularJS ng-bind-html似乎没有更新DOM
AngularJS ng-bind-html does not appear to be updating the DOM
这是正在发生的事情的一个基本示例。HTML绑定实际上工作得很好。我甚至可以在$scope.testDocument上发出警报,并获取我最新更新的内容。但是,如果我尝试选择使用该指令绑定的任何新插入的HTML元素,它总是返回0长度。是否存在jQuery需要的与我缺少的DOM的某种关系?
HTML代码段
<form>
<button id="myButton" type="button" ng-click="testUpdate()">Test Update</button>
</form>
<div ng-bind-html="testDocument" id="testDocument"></div>
JavaScript代码段
$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);
}
编辑
我想在下面dave的回复后添加一些额外的细节。在更新绑定元素后,我添加了一个$watch,它似乎正在工作并做我想做的事情:
$scope.$watch(
function() {
return testDocument ;
},
function(newValue, oldValue) {
if (newValue === oldValue) {
alert($(".test-new-element").length); // Equals 1 as expected.
}
}
);
我阅读的有关此主题的文档可以在https://docs.angularjs.org/api/ng/type/$rootScope.Scope,并通过阅读$watch函数。
您需要等待角度摘要周期完成,直到完成为止,DOM尚未更新。最简单的(尽管有些技巧)解决方案是将其封装在$timeout
:中
$timeout(function() { alert($(".test-new-element").length); });
相关文章:
- 从angularjs中的javascript更新dom
- Javascript没有't更新DOM,直到用户交互
- 如何让React JS点击处理程序在执行时更新DOM
- Ionic:AngularJS变量未使用$scope更新DOM
- 使用Javascript通过ajax回调更新DOM
- Angular JS根据搜索结果和点击事件更新DOM元素
- 我如何告诉javascript立即更新DOM
- 引导复选框-x 选中时未正确更新 DOM - 如何验证表单
- 通过Javascript重复更新DOM后,网页变得很慢
- jQuery更新DOM并运行change()方法
- 使用Angular Directive用$scope属性更新DOM-只要指令运行(无需等待事件)
- AngularJS:在长时间循环期间强制更新DOM(即进度指示器)
- Polymer:当数组中的对象被外部代码修改时,更新dom重复元素
- Javascript 复杂的附加和更新 DOM,因此可以使用 remove(); 将其删除
- ng-show 不更新 DOM 元素
- 浏览器如何从内部HTML属性更新DOM
- 更新 DOM 中的标签
- 是否有模板引擎可以在数据更改时更新 DOM
- 在 AngularJS 中使用从 websockets 动态获取的外部 JSON 数据自动更新 DOM
- 更新 DOM 后“鼠标向上”出现问题