解析promise时,Angular摘要未运行

时间:2016-03-07 06:47:25

标签: angularjs angular-promise angular-digest

在我的角度应用程序中,我有一个带有隔离范围的指令。该指令在其作用域中获取一个字符串参数,因为该值可能在异步进程中由父作用域初始化 - 它还获得了父值在准备好使用时解析的承诺。

奇怪的是:当promise被解析时,指令范围中的值仍然是未定义的,尽管在父控制器中它有一个值。

请参阅此plunker以获取我的体验示例: https://plnkr.co/edit/WLILKaO95xWwU2RF29oX?p=preview

在控制器中:

  $scope.defer = $q.defer();

  // to simulate an async operation
  $timeout(function(){
     $scope.ctrlValue = 'Hi';  
     $scope.defer.resolve();
  });

在指令中:

 scope.valuePromise.then(function(){      
     alert(scope.value);
 });

重要提示:如果我打包警告' $ timeout块中的代码行 - scope.value具有正确的值。当promise得到解决时,似乎angular没有运行摘要。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

在指令中使用var app = angular.module('app', []); app.controller('ctrl', function($scope, $q, $timeout) { $scope.defer = $q.defer(); $timeout(function() { $scope.ctrlValue = 'Hi'; $scope.defer.resolve(); }); }); app.directive('dir', function($timeout){ return { restrict: 'E', scope: { value: '=', valuePromise: '=' }, link: function(scope) { scope.valuePromise.then(function() { $timeout(function() { alert(scope.value); }); }); } }; });。需要一些时间将父作用域的更改应用于指令作用域。您试图在未更新时获取该值。

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="app">
    
    <div ng-controller="ctrl">
    
      <h1>Hello Plunker!</h1>
      <dir value="ctrlValue" value-promise="defer.promise"></dir>
    </div>
  </div>
TypeError: Error #1009: Cannot access a property or method of a null object reference.
at mouseclik_fla::MainTimeline/frame1()