1

I'm looking on how to force a controller to refresh from another controller.

for that I'm using a simple test function :

function test() { alert('test'); }

I think using events is the best solution for this issue.

I used the following code :

First controller

.controller('firstcontroller', function($rootScope,$scope, $http,$timeout) {
$scope.$emit('testevent'); })

Second controller

.controller('firstcontroller', function($rootScope,$scope, $http,$timeout) {
   $scope.$on('refreshr', function (event) {
        alert('test');
    }); })

but this is not working ! any advice ?

Yasser B.
  • 835
  • 6
  • 20
  • 34
  • In the provided code, both event does not have same names ('testevent', 'refreshr' ?, both controller have same name ('firstcontroller')? – jbigman Jun 02 '15 at 09:02
  • See this answer to a similar thread: http://stackoverflow.com/a/14502755/2509908 – chris Jun 02 '15 at 09:03

2 Answers2

2

You can use $rootScope.$broadcast function to broadcast event to all child scopes. And then in you controller you do $scope.$on. But make sure that name of events are the same.

This should be it.

First controller

.controller('firstcontroller', function($rootScope,$scope, $http,$timeout) {
        $rootScope.$broadcast('testevent'); 
})

Second controller

.controller('secondcontroller', function($rootScope,$scope, $http,$timeout) {
   $scope.$on('testevent', function (event) {
        alert('test');
    });
})
Nema
  • 397
  • 2
  • 12
2

You event names are different, also broadcast on rootScope level.

.controller('firstcontroller', function($rootScope,$scope, $http,$timeout) {
    $rootScope.$broadcast('testevent'); 
})

.controller('secondcontroller', function($rootScope,$scope, $http,$timeout) {
   $scope.$on('testevent', function (event) {
        alert('test');
   }) 
})
Zee
  • 8,420
  • 5
  • 36
  • 58