AngularJS正在观看表情
说我们有这个表达方式
$scope.showButton = users.is_admin() && !document.is_provided; 然后在同一个控制器中,您有一个更新Document.is_provided值的按钮: <button ng-click="document.is_provided = true;">Provide document</button> 问题是$scope.showButton现在应该改变但它没有改变. 更新: 解决方法
我想补充一下squiroid的答案并向你解释它为什么会起作用.我将为您提供一种非常简单的方式来理解,因为当我开始时,这对我来说也是一个非常普遍的问题.
Angular有一个称为Digest循环的东西.它是一系列连续调用的函数,以确保如果变量A与另一个变量B双向绑定(例如使用ng-model),它们始终保持同步(即,始终具有相同的值) ). angular提供的函数(或通常以$开头的服务,如$timeout等)自动启动摘要周期 所以我们假设你有一个变量A并且你将它绑定到$scope变量B,它等于变量C.你会期望C也被绑定到A,对吧?因为你认为当你改变C时,B应该改变,所以A也应该改变.但这只有在您开始摘要周期时才有可能.该循环将查找需要更新的变量,并将更新它们.但是,通过简单地更改C的值,您将永远不会触发摘要周期,因此您的更改将永远不会传播到A. 当你在$watch中添加一个变量时你所做的是(如$建议的那样),你强行开始一个摘要周期.所以现在当你改变C时,你开始循环,它追踪它也需要更新A,这就是它的工作原理. 在您的示例中,$scope.showButton绑定到document.is_provided.现在,您正在使用非角度函数来更改document.is_provided的值.这意味着您不会触发摘要周期,这意味着您的更改永远不会传播到$scope.showButton.因此,showButton始终保持错误. 当然,还有一个例子可以帮助您理解: 观看控制台.我添加了日志以帮助您理解. 希望我帮助:) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |