angular スコープへの変更は、angular フレームワーク内で行う必要があります。フレームワーク外で変更を行う必要がある場合は、.$apply関数を使用する必要があります。
$apply() は、angular フレームワークの外部から angular で式を実行するために使用されます。
あなたのケースでは、コールバックが角度フレームワークの外部で呼び出される$broadcast withinをトリガーしています。setTimeout
したがって、角度によって提供される$timeoutサービスを使用するか、 .$apply関数を使用するという 2 つの解決策があります。
関数を使用することを好み$timeout
ます。
var ParentCtrl = function($scope, $rootScope, $timeout){
$scope.broadcast = function(){
$rootScope.$broadcast('Sup', 'Here is a parameter');
};
$timeout(function(){
$scope.$broadcast('Sup');
}, 1000);
//this one does not work! Most likely due to scope life cycle
$scope.$broadcast('Sup');
$scope.$on('SupAgain', function(){
console.log('SupAgain got handled!');
});
};
デモ:フィドル
使用する$apply
setTimeout(function(){
$scope.$apply(function(){
$scope.$broadcast('Sup');
});
}, 1000);