2014-08-29 13 views
12

Jestem nowy w używaniu kątowych js i i zadeklarowałem wiele kontrolerów i teraz chcę do funkcji użytkownika jednego kontrolera do innego kontrolera. tutaj jest mój przykładowy kod.Funkcja wywołania z innego kontrolera Angular Js

app.controller('Controller1',function($scope,$http,$compile){ 
    $scope.test1=function($scope) 
    { 
      alert("test1"); 
    } 
}); 

app.controller('Controller2',function($scope,$http,$compile){ 
    $scope.test2=function($scope) 
    { 
      alert("test1"); 
    } 
}); 
app.controller('Controller3',function($scope,$http,$compile){ 
    /// 
}); 

Teraz chcę wywołać funkcję test2 wewnątrz kontrolera3. Czy ktoś może pomóc ... Dzięki Avance ... :)

Odpowiedz

4

Najlepszym sposobem jest napisanie usługi i korzystanie z tej usługi w obu kontrolerach. zobacz dokumentację Service documentation

Jeśli naprawdę chcesz uzyskać dostęp do metody kontrolera z innego kontrolera, a następnie postępować zgodnie z poniższą opcję: emitującą zdarzenie na zakres:

function FirstController($scope) { $scope.$on('someEvent', function(event, args) {});} 

function SecondController($scope) { $scope.$emit('someEvent', args);} 
+0

Tak Ale już napisaliśmy kod z dużą ilością kontrolera, więc teraz muszę wywołać jedną funkcję, która jest w innym kontrolerze. – Mayur

+1

To dobrze. potrzebujesz tylko przenieść tę wspólną funkcję do usługi i wywołać ją z wymaganych kontrolerów. – Seminda

13

nie można wywołać metodę z kontrolera wewnątrz kontroler. Będziesz musiał wyodrębnić tę metodę, stworzyć usługę i wywołać ją. To również oddzielenie kodu od siebie i uczynić ją bardziej dającej się przetestować

(function() { 
    angular.module('app', []) 
     .service('svc', function() { 
      var svc = {}; 

      svc.method = function() { 
       alert(1); 
      } 

      return svc; 
     }) 
     .controller('ctrl', [ 
      '$scope', 'svc', function($scope, svc) { 
       svc.method(); 
      } 
     ]); 
})(); 

Przykład: http://plnkr.co/edit/FQnthYpxgxAiIJYa69hu?p=preview

+0

Dzięki za pomoc :) – Mayur

0

Sterownik jest konstruktor będzie tworzyć nowy przypadek, gdy na przykład stosuje się w dyrektywie.

można nadal robić to, co chcesz, zakładając, że sterowniki są w tym samym zakresie, po prostu zrobić:

Uwaga muszą być w samym zakresie może nadal działać, jeśli zakres dziecko nie było izolowane . Definicja dyrektywy:

{ 
    controller: Controller1, 
    controllerAs: 'ctrl1', 
    link: function($scope) { 

     $scope.ctrl1.test1(); // call a method from controller 1 
     $scope.ctrl2.test2(); // created by the directive after this definition 
     $scope.ctrl3.test3(); // created by the directive after this definition 
    } 
} 

.... 
{ 
    controller: Controller2, 
    controllerAs: 'ctrl2', 
    link: function($scope) { 
     $scope.ctrl1.test1(); // created earlier 
     $scope.ctrl2.test2(); // ... 
     $scope.ctrl3.test3(); // created by the directive after this definition 
    } 
} 

.... 
{ 
    controller: Controller3, 
    controllerAs: 'ctrl3', 
    link: function($scope) { 
     $scope.ctrl1.test1(); 
     $scope.ctrl2.test2(); 
     $scope.ctrl3.test3(); 
    } 
} 

To powinno zadziałać.

Powiązane problemy