Angularjs 等待$scope在html中真正应用更改
我在尝试检测$scope变量何时真正影响html时遇到问题。 我需要在$scope真正将更改应用到html之后访问元素,但是$scope.$watch没有做到这一点 JS: HTML: 问题是,即使$scope正在应用新内容,元素仍然不存在,jQuery返回未定义的结果,所以我需要等到$scope真正将更改应用到htmlAngularjs 等待$scope在html中真正应用更改,angularjs,Angularjs,我在尝试检测$scope变量何时真正影响html时遇到问题。 我需要在$scope真正将更改应用到html之后访问元素,但是$scope.$watch没有做到这一点 JS: HTML: 问题是,即使$scope正在应用新内容,元素仍然不存在,jQuery返回未定义的结果,所以我需要等到$scope真正将更改应用到html 我知道一个解决方案可能是$timeout,但它并不可靠,有一些东西可以帮助我?不知道为什么需要jQuery-使用angular可能有一个更简单的方法,但就是这样:angular
我知道一个解决方案可能是$timeout,但它并不可靠,有一些东西可以帮助我?不知道为什么需要jQuery-使用angular可能有一个更简单的方法,但就是这样:angular有一个名为$$postDigest的私有方法,由于所有DOM和模型更改都发生在$digest循环期间,所以它应该做您想要做的事情,另一种方法是使用$timeout,我为您制作了working plunker
不知道您为什么需要jQuery—使用angular可能有一种更简单的方法,但现在就可以了:angular有一个名为$$postDigest的私有方法,因为所有DOM和模型更改都发生在$digest循环中,它应该做您想要做的事情,另一种方法是使用$timeout,我已经为您制作了工作plunker
为什么需要jQuery?为什么需要jQuery?这只是一个例子,我实际上需要它来处理videojs videojs'myElement',{}。。。。这就是为什么我需要知道元素何时真的存在的原因。我已经将我的答案延长了$timeout,这做了同样的事情,但我认为它更稳定,因为它不是私有的角度方法,请检查它。我刚刚尝试了$$postDigest,但并不是所有的元素都更新了。你可以看到,自从我写下这个答案以来已经过去了5年,事情可能已经改变了,你能在plunker code pen或JSFIDLE上提供一些可复制的场景吗?这只是一个例子,我实际上需要它来处理videojs videojs'myElement',{}。。。。这就是为什么我需要知道元素何时真的存在的原因。我已经将我的答案延长了$timeout,这做了同样的事情,但我认为它更稳定,因为它不是私有的角度方法,请检查它。我刚刚尝试了$$postDigest,但并不是所有的元素都更新了。你可以看到,自从我写下这个答案以来已经过去了5年,事情可能已经发生了变化,您能在plunker code pen或JSFIDLE上提供一些可复制的场景吗?
$scope.variable = "<p id='myElement'>Hello world!</p>";
console.log(jQuery('#myElement')[0]);
<div ng-bind-html="varible | trustAsHtml"></div>
$scope.htmlvar = $sce.trustAsHtml('<strong>Test</strong>');
$timeout(function () {
console.log('timeout', jQuery('strong').text())
}, 0, false) //false to not run another digest
$scope.$$postDigest(function () {
console.log('postDigest', jQuery('strong').text())
})