Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 等待$scope在html中真正应用更改_Angularjs - Fatal编程技术网

Angularjs 等待$scope在html中真正应用更改

Angularjs 等待$scope在html中真正应用更改,angularjs,Angularjs,我在尝试检测$scope变量何时真正影响html时遇到问题。 我需要在$scope真正将更改应用到html之后访问元素,但是$scope.$watch没有做到这一点 JS: HTML: 问题是,即使$scope正在应用新内容,元素仍然不存在,jQuery返回未定义的结果,所以我需要等到$scope真正将更改应用到html 我知道一个解决方案可能是$timeout,但它并不可靠,有一些东西可以帮助我?不知道为什么需要jQuery-使用angular可能有一个更简单的方法,但就是这样:angular

我在尝试检测$scope变量何时真正影响html时遇到问题。 我需要在$scope真正将更改应用到html之后访问元素,但是$scope.$watch没有做到这一点

JS:

HTML:

问题是,即使$scope正在应用新内容,元素仍然不存在,jQuery返回未定义的结果,所以我需要等到$scope真正将更改应用到html


我知道一个解决方案可能是$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())
})