在JQuery调用

时间:2015-09-17 13:43:24

标签: jquery angularjs visualize

我在基于角度的网站上使用jasper报告。 Jasper报告的visualize.js包含jQuery。当我加载报告时,我更新了我的范围中的值

$scope.reportLoaded = true

但未在页面中更新

{{reportLoaded}} //false

我想这可能是角度和jQuery之间的冲突。解决这个问题的唯一方法是使用$ scope。$$ apply()我已经读过,我们不应该使用它。如何在不使用申请的情况下解决此问题?如果没有其他方法可以解决问题,那么使用它是否安全?

2 个答案:

答案 0 :(得分:0)

你必须在这些情况下使用$ apply。这就是$ apply的用途。这是为了说

"嘿,有角度,我在你不知情的情况下做了一些改变。你应该更好地运行脏检查机制,看看有什么变化"

所以,使用$ apply

答案 1 :(得分:0)

范围内未通过角度进行的任何更新都不会对角度有明显的影响。因此,当您更新当前$scope.$apply();中的任何值时,必须使用$scope

Angular是一种双向数据绑定机制,因此当您更改模型时会更新视图,反之亦然。内部角度运行$digest周期,执行当前$scope中的所有检查。只要你在角度内的$scope变量中进行更新就会正常但不在其中,如果你用原生javascript或其他库如jQuery更改值,那么必须运行$digest循环,这是$scope.$apply()派上用场的地方。

$scope.$digest()也非常有用,它比$scope.$apply()快得多,因为它$scope.$digest()在当前范围内运行但$scope.$apply()$rootscope上运行并且在内部触发$rootscope.$digest()

$scope.$digest()首先要使用它,你需要设置一个范围观察器,它实际上是做什么的,它会不断地观察范围的变化,无论是角度还是来自像你这样的其他来源。如果要与$scope.$digest()一起使用,则是设置范围观察器的完美示例。

$scope.$watch('reportLoaded', function(newValue, oldValue, scope) {
   scope.reportLoaded = newValue !== oldValue ? newValue : oldValue;
});