$rootScope に $broadcast を追加し、それを他のコントローラーにキャッチすると、表示する値が反映されません。例:
// on first ctrl.
controller('firstCtrl', ['$scope','$location', '$rootScope', function($scope, $location, $rootScope) {
$scope.myFunc = function() {
$rootScope.$broadcast('someEvent');
$location.path('/users');
}
}])
// On Users Page.
.controller('usersCtrl', ['$scope','$rootScope', function($scope, $rootScope) {
$scope.dataFilter = {};
$rootScope.$on('someEvent', function(event, b) {
$scope.callOnBroadcast();
});
// call this function on broadcast.
$scope.callOnBroadcast = function() {
$scope.dataFilter = {
types: [
{key: 'tags', val: 'Collections'},
{key: 'prices', val: 'Price'},
{key: 'ratings', val: 'Rating'},
{key: 'designers',val: 'Designer'}
],
data: {tags: [], prices: [], ratings: [], designers: []}
};
$scope.$apply();
};
}])
<h4 data-ng-repeat="ftr in dataFilter.types">
{{ftr.val}}
</h4>
MyFunc
関数を使用するfirstCtrl
と、ユーザーのページにリダイレクトされ、関数の実行もブロードキャストされます。ユーザーページで$scope.callOnBroadcast()
は、ブロードキャストがオンになっているときに使用しますが、使用してもビューページに変更が反映されています$scope.$apply()
。どこが間違っていますか?