Как вызвать функцию с другого контроллера в 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
}
}
]);
Ответы
Ответ 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();
Вы можете попробовать его здесь