2015-08-27 61 views
0

對Angular來說很新穎,並試圖學習在範圍之外進行更改時獲得角度摘要的最佳方法。如果這個問題有更好的標題,請讓我知道。 對於在範圍之外更改的對象,我已經有了相當多的運氣,但不是在範圍之外創建的對象。下面的例子。我可以在$scope.sc.conversationManageger.conversations.added(conversation)上註冊更改,在回調中我使用$scope.$apply();,並按預期更新綁定(或按我的預期)。然而,在該回調中,我在上一回調傳遞的conversation對象上註冊了另一個事件conversation.chatService.state.changed。在這第二個回調中,我確實得到了事件觸發,並可以使用console.log(change)進行確認,但我在第二個回調中使用的if (!$scope.$$phase) {$scope.$apply();}似乎沒有像原始回調那樣更新綁定。我嘗試了三種不同的方法,如下面的代碼所示,但他們都沒有效果。如果我從ng-click事件中調用$scope.verify(),但它沒有問題更新。

$scope.sc = new Skype.Web.Model.Application; 

$scope.sc.conversationsManager.conversations.added(function (conversation) { 
    if (!$scope.$$phase) { 
     //This Apply updates the objects as expected 
     $scope.$apply(); 

     conversation.chatService.state.changed(function (change) { 
       //I do get the output in the console as expected so event does fire 
       console.log(change) 
       //Attempt 1, current Scope Apply doesnt update $scope.sc object 
       if (!$scope.$$phase) {$scope.$apply();} 
       //Attempt 2, Getting scope from ref doesnt update $scope.sc object 
       var scopeRef = angular.element($("#scopeAnchor")).scope(); 
       if (!scopeRef.$$phase) { scopeRef.$apply(); } 
       // Attempt 3, calling verify function which worked when called from ng-click 
       // but not from here 
       $scope.verify(); 
      });   
    } 
}); 

//Executing this function does update everything as expected 
$scope.verify = function() { 
    // console.log($scope.sc); 
    if (!$scope.$$phase) { $scope.$apply() } 
} 

再次感謝您的幫助!

+0

當你說「範圍應用不更新$ scope.sc對象」你期待看到什麼? – HankScorpio

+0

'conversation.chatService.state'是'$ scope.sc.conversationsManager.conversations'綁定的成員,不會在HTML標記中更新,除非我調用'$ scope.verify()'函數。但是'$ scope.sc.conversationsManager.conversations'本身確實會更新它的綁定。 – strspl

回答

0

我最終能夠通過廣播在回調的事件與$rootScope.$broadcast('skypeChange');,然後使用

$scope.$on('skypeChange', function (event) { 
      if (!$scope.$$phase) { $scope.$apply() } 
     }); 

觸發應用觸發$scope.$apply()。希望這可以幫助任何有同樣問題的人。