對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() }
}
再次感謝您的幫助!
當你說「範圍應用不更新$ scope.sc對象」你期待看到什麼? – HankScorpio
'conversation.chatService.state'是'$ scope.sc.conversationsManager.conversations'綁定的成員,不會在HTML標記中更新,除非我調用'$ scope.verify()'函數。但是'$ scope.sc.conversationsManager.conversations'本身確實會更新它的綁定。 – strspl