加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

AngularJS正在观看表情

发布时间:2020-12-17 17:58:10 所属栏目:安全 来源:网络整理
导读:说我们有这个表达方式 $scope.showButton = users.is_admin() !document.is_provided; 然后在同一个控制器中,您有一个更新Document.is_provided值的按钮: button ng-click="document.is_provided = true;"Provide document/button 问题是$scope.showButton
说我们有这个表达方式

$scope.showButton = users.is_admin() && !document.is_provided;

然后在同一个控制器中,您有一个更新Document.is_provided值的按钮:

<button ng-click="document.is_provided = true;">Provide document</button>

问题是$scope.showButton现在应该改变但它没有改变.

更新:
Plnkr显示简化问题:http://plnkr.co/edit/Qk2jnHAmqsrNXSAjDYEk?p=preview

解决方法

我想补充一下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始终保持错误.

当然,还有一个例子可以帮助您理解:
http://jsbin.com/vojoso/edit?js,output

观看控制台.我添加了日志以帮助您理解.
注释掉$watch语句,看看会发生什么.
尝试理解它然后自己做,你会得到它.

希望我帮助:)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读