对Angular很新,并尝试在范围之外进行更改时学习角度消化的最佳方法。如果这个问题有更好的标题,请告诉我。
我对在范围之外变化的对象有了相当多的运气,但对于在范围之外创建的对象却没有。以下示例。我可以注册$scope.sc.conversationManageger.conversations.added(conversation)
上的更改,并在回调中使用$scope.$apply();
并按预期(或我预期)更新绑定。但是在该回调中,我注册到从前一个回调传递的conversation.chatService.state.changed
对象上的另一个事件conversation
。在第二次回调中,我确实要触发事件并且可以使用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 :(得分:0)
我最终能够通过使用$scope.$apply()
在回调中广播事件然后使用
$rootScope.$broadcast('skypeChange');
$scope.$on('skypeChange', function (event) {
if (!$scope.$$phase) { $scope.$apply() }
});
触发申请。希望这可以帮助任何有同样问题的人。