Как вызвать функцию с другого контроллера в angularjs? - программирование
Подтвердить что ты не робот

Как вызвать функцию с другого контроллера в 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
        }
    }
]);
4b9b3361

Ответ 1

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

Итак, в вашем случае вы хотите вызвать метод контроллера "Один" внутри контроллера "Два", правильный способ сделать это:

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, вы можете отправить любые данные в качестве второго параметра.

Ответ 2

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

Ответ 3

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

$scope.parentmethod();  

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

Ответ 4

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

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

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

См. документацию scope

В этом случае проверьте $on, $broadcast и $emit.

Ответ 6

Если вы хотите выполнить родительский метод родительского контроллера в дочернем контроллере, вызовите его:

$scope.$parent.parentmethod();

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