angularjs – 角度$scope $apply vs $timeout作为安全$apply
我试图更好地理解在Angular中使用$ timeout服务作为一种“安全$ apply”方法的细微差别。基本上在一段代码可以响应于Angular事件或非角事件(例如jQuery或一些标准DOM事件)运行的情况下。
据我所知: >在$ scope中包装代码。$ apply适用于你的场景 看看Angular源代码,看起来像$ timeout会调用$ rootScope。$ apply()。 >为什么如果一个摘要周期已经在进行,$ timeout()也会引发一个错误? 感谢任何洞察。
$ timeout使用一个未记录的Angular服务$ browser。具体来说,它使用$ browser.defer(),通过window.setTimeout(fn,delay)异步执行你的函数,它总是在Angular生命周期之外运行。只有一次window.setTimeout已经触发你的函数将$ timeout调用$ rootScope。$ apply()。
我会这样说。另一个用例是,有时你需要访问一个$ scope变量,你知道只有在digest之后才初始化。简单的例子是如果你想在控制器构造函数中设置一个窗体的状态为dirty(无论什么原因)。没有$ timeout FormController没有被初始化并发布到$ scope上,所以在$ timeout内包装$ scope.yourform.setDirty()可以确保FormController已经初始化。当然你可以做一个指令没有$超时,只是给另一个用例的例子。
它应该总是安全的,但你的方法应该总是目标为$ apply()在我看来。我目前工作的Angular应用程序是相当大,我们只需要依赖$ timeout一次,而不是$ apply()。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |