ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

javascript – 在promise.then()中分配时Angular不更新绑定

2019-08-31 13:35:37  阅读:164  来源: 互联网

标签:javascript angularjs commonjs


在我的角度应用程序中,我有一个带有名称的$scope变量用户.

如果我在点击时将此变量设置为“test”:

< a href =“#”ng-click =“setUser()”>设置用户< / a>

与功能

$scope.user = {
  name: 'blank'
}

$scope.setUser = function(name) {
  $scope.user.name = name
}

这很好用.但是,如果我在promise.then()*中设置它,它似乎正确设置变量,但Angular不会在视图中更新它,直到我在$scope.user上执行了另一个操作.

< a href =“#”ng-click =“startLogin()”>设置用户< / a>

现在调用一个新函数startLogin()

$scope.user = {
  name: 'blank';
};

$scope.setUser = function(name) {
  $scope.user.name = name;
};

$scope.startLogin = function() {
  var promise = Kinvey.ping();
  promise.then(function(response) {
    console.log('success');
    $scope.setUser('test');
  });
};

这样做之后.视图中的{{user.name}}字段仍为“空白”.
我还测试了以下内容:

>当我将它记录到控制台时,$scope在函数中很活跃.
>还记录$scope.user正确返回,表明变量已更改.
>有趣的是,视图最终在我第二次点击时发生了变化.
>我也可以通过添加$scope来解决这个问题.$apply(),但这似乎是解决这个问题的错误方法.

*我使用的是Kinvey,它使用与CommonJS’s promise.then()类似或相同的语法

解决方法:

双向绑定在角度digest cycle期间得到更新.这些周期由绑定到指令的DOM事件或参与Angular生态系统的其他实体触发.

因此,Angular提供的“魔力”只是自动触发该摘要周期.您可以使用$scope.apply触发摘要周期:

promise.then(function(response) {
  $scope.$apply(function() {
     console.log('success');
     $scope.setUser('test');
  });
});

这是处理第三方库时的推荐方法.

标签:javascript,angularjs,commonjs
来源: https://codeday.me/bug/20190831/1775977.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有