2014-11-18 2 views
0

Есть ли возможность вызвать одну функцию контроллера в другом контроллере. Я видел, что данные манипулируют между контроллерами, но не функциями.Вызов одной функции контроллера в другом контроллере

Для примера. У меня два контроллера.

Module.Controller('Controller1', function($scope){ 
    $scope.function1 = function(){}; 
}); 

Module.Controller("Controller2", function(){ 
    // I need to call the function function1() from the controller1 
}); 

Возможно ли это? Можете ли вы помочь мне решить эту проблему.

ответ

0

Вы не можете напрямую вызвать одну функцию на другой контроллер. Но, вы можете изменить одно из следующих способов:

  1. Использование $rootScope.function1 вместо $scope, $rootScope является доступны каждому $scope
  2. Использование $rootScope.$emit вызвать событие из Controller2 и поймать его с $rootScope.$on в Controller1 и затем использовать функцию
  3. Вы можете определить функцию в службе и использовать его с обоих контроллеров
  4. Вы можете использовать $scope.$watch или $rootScope.$watch если контроллер 2 может изменить некоторые переменные в области видимости Controller1, или использовать $rootScope.$watch если
+0

1. Я не хочу быть использовать $ rootscope 2. Я думаю, что этот подход не требуется один мой вопрос, это будет использоваться в вызове одной функции, которая выполняется после действия в другом контроллере. 3. Через службы, я достиг. Но я тоже этого не хочу. 4. Этот подход также не подходит для моего требования. Мое требование - просто вызвать функцию, введя другой контроллер. Благодарим вас за отзыв – Bhimisetty

3

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

Пример:

Module.service("Service1", function(){ 
    this.function1 = function(){ 
     ... 
    } 
}); 

Module.Controller('Controller1', function($scope, Service1){ 
    $scope.function1 = Service1.function1; 
}); 

Module.Controller("Controller2", function(Service1){ 
    // I need to call the function function1() from the controller1 
    // simply call Service1.function1 here 
}); 
+0

Да, мы можем использовать сервисы/фабрики/провайдеры для достижения такого рода поведения. Я тоже пробовал это, прежде чем задавать вопрос, он отлично работал для меня. Но я не хочу работать с ними, а также я не заинтересован в использовании $ rootcope. Помимо них любое решение будет заметным. – Bhimisetty

+0

@Bhimisetty есть конкретная причина, по которой вы не хотите пользоваться услугами? Я понимаю ваше возражение против использования $ rootScope, это решение, которое я бы тоже не предложил. Вы действительно должны содержать $ rootScope в чистоте. – thomaux

+0

Благодарим вас за отзыв. В моем приложении я обрабатываю много функций в контроллерах. Некоторые из функций являются общими для двух или более контроллеров. На самом деле, если я пользуюсь услугами, опять-таки это бремя для моего приложения, я думаю. В моей точке зрения, если мы работаем с данными, то только мы ищем сервисы, по моему мнению, не использую данные. Я использую только модальные всплывающие окна. Если решение не найдено, то в конечном итоге мне нужно будет воспользоваться услугами. – Bhimisetty

Смежные вопросы