it-roy-ru.com

Как вызвать функцию из другого контроллера в angularjs?

Мне нужно вызвать функцию в другом контроллере в angular js.Как это возможно, пожалуйста, помогите мне заранее спасибо

Код:

app.controller('One', ['$scope',
    function($scope) {
        $scope.parentmethod = function() {
            // task
        }
    }
]);
app.controller('two', ['$scope',
    function($scope) {
        $scope.childmethod = function() {
            // Here i want to call parentmethod of One controller
        }
    }
]);
54
Bhavesh Chauhan

Связь между контроллерами осуществляется с помощью методов $emit + $on/$broadcast + $on.

Так что в вашем случае вы хотите вызвать метод Controller "One" внутри Controller "Two", правильный способ сделать это:

app.controller('One', ['$scope', '$rootScope'
    function($scope) {
        $rootScope.$on("CallParentMethod", function(){
           $scope.parentmethod();
        });

        $scope.parentmethod = function() {
            // task
        }
    }
]);
app.controller('two', ['$scope', '$rootScope'
    function($scope) {
        $scope.childmethod = function() {
            $rootScope.$emit("CallParentMethod", {});
        }
    }
]);

Пока вызывается $rootScope.$emit, вы можете отправлять любые данные в качестве второго параметра.

109
Yashika Garg

Я бы не использовал функцию из одного контроллера в другой. Лучшим подходом было бы перенести общую функцию в службу, а затем внедрить службу в оба контроллера.

21
Junaid

Если two контроллер вложен в One контроллер.
Тогда вы можете просто позвонить:

$scope.parentmethod();  

Angular будет поиск для функции parentmethod, начиная с текущей области и вплоть до достижения rootScope.

7
cheziHoyzer

Вы можете использовать события для предоставления своих данных. Код такой:

app.controller('One', ['$scope', function ($scope) {
         $scope.parentmethod=function(){
                 $scope.$emit('one', res);// res - your data
         }
    }]);
    app.controller('two', ['$scope', function ($scope) {
         $scope.$on('updateMiniBasket', function (event, data) {
                ...
         });             
    }]);
5
vitalik_74

Наилучшим подходом для связи между двумя контроллерами является использование событий.

Смотрите объем документацию

В этой проверке $on, $broadcast и $emit.

4
Reena

Если вы хотите выполнить функцию parentmethod родительского контроллера внутри дочернего контроллера, вызовите ее:

$scope.$parent.parentmethod();

Вы можете попробовать это здесь

1
ER144