Yasser B.
Yasser B.

Reputation: 835

How to call a function in a controller from a different controller AngularJS

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 ?

Upvotes: 1

Views: 42

Answers (2)

Zee
Zee

Reputation: 8488

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');
   }) 
})

Upvotes: 2

Nema
Nema

Reputation: 397

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');
    });
})

Upvotes: 2

Related Questions