Javascript 在promise.then()中赋值时不更新绑定

Javascript 在promise.then()中赋值时不更新绑定,javascript,angularjs,commonjs,Javascript,Angularjs,Commonjs,在我的angular应用程序中,我有一个$scope变量user和一个名称 如果我在单击时将此变量设置为“test”: 带函数 $scope.user = { name: 'blank' } $scope.setUser = function(name) { $scope.user.name = name } 这个很好用。但是,如果我在一个promise.then()*中设置了这个变量,它似乎正确地设置了变量,但是Angular不会在视图中更新它,直到我对$scope.user执行

在我的angular应用程序中,我有一个
$scope
变量
user
和一个
名称

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

带函数

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

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

现在调用一个新函数,
startogin()

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

  • $scope
    在我将其登录到控制台时处于活动状态,并且在函数中运行良好
  • 另外,日志记录
    $scope.user
    正确返回,表明变量已更改
  • 有趣的是,在我第二次单击时,视图终于改变了
  • 我也可以通过添加
    $scope.$apply()
    来解决这个问题,但这似乎是解决这个问题的错误方法

*我正在使用的语法与

相似或相同,双向绑定在一个角度变化过程中得到更新。这些循环由绑定到指令的DOM事件或参与Angular生态系统的其他实体触发

所以Angular提供的“魔力”就是自动触发消化循环。您可以使用
$scope.apply
触发摘要循环:

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

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

实际上是
$scope.$apply
,但如果不是这样,答案应该会起作用。现在是2016年,我发现这个错误:$digest已经在进行中。今天,$scope已经被弃用了。如何将其与vm一起使用?
promise.then(function(response) {
  $scope.$apply(function() {
     console.log('success');
     $scope.setUser('test');
  });
});