我不知道如何使用$scope.$watch
和$scope.$apply
。官方文档没有帮助。
我不明白的是:
我尝试了本教程,但这需要对它的理解$watch
并且$apply
理所当然。
做什么$apply
和$watch
做什么,以及如何正确使用它们?
您需要了解AngularJS的工作原理才能理解它。
首先,AngularJS定义了所谓的 摘要循环 的概念。这个周期可以看作是一个循环,在此期间AngularJS检查所有s 监视
的所有变量是否有任何更改$scope
。因此,如果您已$scope.myVar
在控制器中定义并且该变量被 标记为“正在监视”
,那么您将隐式告诉AngularJS监视myVar
循环的每次迭代中的更改。
一个自然而然的跟进问题是:是否一切都与$scope
被监视有关?幸运的是,没有。如果您要监视中的每个对象的更改$scope
,那么摘要循环很快就会花费很多时间进行评估,并且您会很快遇到性能问题。这就是AngularJS团队为我们提供了两种方法来声明某些$scope
变量被监视的原因(请参阅下文)。
有两种将$scope
变量声明为被监视的方法。
<span>{{myVar}}</span>
$watch
服务手动添加广告1)这是最常见的情况,我敢肯定您以前看过它,但是您不知道这是在后台创建手表的。是的,它有!使用AngularJS指令(例如ng- repeat
)也可以创建隐式监视。
广告2)这就是您制作 手表的方式
。$watch
附加到的某些值$scope
更改后,service服务可以帮助您运行某些代码。它很少使用,但有时会有所帮助。例如,如果您希望每次“
myVar”更改时都运行一些代码,则可以执行以下操作:
function MyController($scope) {
$scope.myVar = 1;
$scope.$watch('myVar', function() {
alert('hey, myVar has changed!');
});
$scope.buttonClicked = function() {
$scope.myVar = 2; // This will trigger $watch expression to kick in
};
}
您可以将 $apply
功能视为集成机制。您会看到,每次更改直接 附加到$scope
对象的某些受 监视变量时
,AngularJS都会知道更改已发生。这是因为AngularJS已经知道监视这些更改。因此,如果发生在框架管理的代码中,则摘要循环将继续进行。
但是,有时您想 在AngularJS世界之外更改一些值, 并看到更改能够正常传播。考虑一下-您有一个$scope.myVar
将在jQuery
$.ajax()
处理程序中修改的值。这将在将来的某个时刻发生。AngularJS不能等待这种情况发生,因为尚未指示它等待jQuery。
为了解决这个问题,$apply
已经引入。它使您可以显式启动消化周期。但是,您仅应使用此方法将某些数据迁移到AngularJS(与其他框架集成),而决不要将此方法与常规AngularJS代码结合使用,因为AngularJS会抛出错误。
好了,既然您已经知道了所有这些,那么您应该再次真正按照本教程进行操作。$scope
只要没有任何变化,摘要周期就可以通过评估附加到all
的每个观察程序来确保UI和JavaScript代码保持同步。如果摘要循环中没有其他更改发生,则视为已完成。
您可以$scope
在Controller中显式地将对象附加到对象,也可以{{expression}}
直接在视图中以形式声明它们。
我希望这有助于澄清有关这一切的一些基本知识。
进一步阅读:
如何使用和方法将对象从一个控制器发送到另一个控制器? 它的工作方式并不像我想的那样。和如何工作?
问题内容: 如何使用和方法将对象从一个控制器发送到另一个控制器? 它不按我认为的方式工作。如何做和工作? 问题答案: 首先,父子范围关系确实很重要。你有两种可能性发出某些事件: -将事件向下分发到所有子范围, -通过范围层次结构向上调度事件。 我对你的控制器(作用域)关系一无所知,但是有几种选择: 如果scope of 是作用域的父级,则你的代码应通过替换为来工作: 如果你的范围之间没有父子关系,
问题内容: 如何测试广播后是否填充了示波器?我已经搜索并在stackexchange中找到了一些质量检查,但是没有一个回答我的问题。该代码可以正常工作,只是不知道如何对其进行测试。我可以补充一点,我是测试的新手,尤其是Jasmine。 所以,这是代码: 服务CrappySvc: 控制器GetCrappyCtrl: 茉莉花: })); }); 结石 问题答案: 您需要告诉Jasmine让间谍调用实际
主要内容:如何使用 Scope,AngularJS 实例,Scope 概述,AngularJS 实例,Scope 作用范围,AngularJS 实例,根作用域,AngularJS 实例Scope(作用域) 是应用在 HTML (视图) 和 JavaScript (控制器)之间的纽带。 Scope 是一个对象,有可用的方法和属性。 Scope 可应用在视图和控制器上。 如何使用 Scope 当你在 AngularJS 创建控制器时,你可以将 $scope 对象当作一个参数传递: AngularJS
本文向大家介绍angularJS 中$scope方法使用指南,包括了angularJS 中$scope方法使用指南的使用技巧和注意事项,需要的朋友参考一下 以上就是关于angularJS 中$scope方法使用指南的全部内容了,希望大家能够喜欢。
问题内容: 我有以下指令: 这是我如何调用它: 首次初始化指令时,则为空。稍后,通过ajax对其进行检索,并填充其值。 问题是,我怎么看待更新的价值?当我从链接方法执行此操作时: 初始化指令时,仅调用一次,然后该值为空。通过ajax(来自)检索值时,不会再次调用此watch函数。但是,在我要显示的页面的其他部分,该值在获取ajax请求时会更新。因此,我认为问题与在ajax请求之后执行无关。 编辑: