如何在angularjs中使用控制器内部的Promise?

时间:2017-06-04 15:51:54

标签: javascript angularjs

我正在学习angularjs并尝试使用h3Promise代码添加问候语。但它不起作用(没有错误日志)。



angular.module('app', []).controller('test', function ($scope) {
  $scope.greeting = 'Hello world!';
  
  let p1 = new Promise(r => r('Hi'));  
  let p2 = new Promise(r => r('Im Gosu'));
  
  Promise.all([p1, p2]).then(p => {
    $scope.greeting = `${p[0]} ${p[1]}`;
    
    console.log(p[0]);
    console.log(p[1]);
  });
});

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="app" ng-controller="test">
  <h3 ng-bind="greeting"></h3>
</div>
&#13;
&#13;
&#13;

我错过了什么?

1 个答案:

答案 0 :(得分:2)

Angular需要知道您的promise已经解决以触发更改检测周期,重新评估视图中使用的表达式greeting,检测它已更改,并更新DOM。

如果您使用角度$ q服务,那是自动的,因为每次解决$ q承诺时,$ q角度服务都会触发更改检测。通过使用原生承诺,您可以在角度背后改变模型的状态。

所以,要么使用$ q,要么了解你正在做什么,并在回调函数的末尾添加$scope.$apply(),以通知angular你已经改变了模型。