2014-08-29 22 views
12

Açısal jleri kullanmakta yeniyim ve birçok denetleyiciyi beyan ediyorum ve şimdi bir denetleyicinin kullanıcı işlevini başka bir denetleyiciye eklemek istiyorum. İşte benim örnek kodum.Başka bir Kontrolörden çağrı fonksiyonu Açısal 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){ 
    /// 
}); 

Şimdi, controller3'ün içindeki test2 işlevini çağırmak istiyorum. Herhangi biri yardımcı olabilir .. Avance'de teşekkürler ... :)

cevap

4

En iyi yol bir hizmet yazmak ve bu hizmeti her iki denetleyicide de kullanmaktır. kapsamına bir etkinlik yayan:

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

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

Evet Ancak, çok sayıda denetleyiciyle zaten kod yazdık, şimdi başka bir denetleyicideki bir işlevi çağırmam gerekiyor. – Mayur

+1

Thats fine. sadece ihtiyacınız olan şey, bu ortak işlevi bir hizmete taşımak ve gerekli kontrolörlerden çağırmaktır. – Seminda

13

Sen içinde bir kumandadan gelen bir yöntemi diyemezsin Eğer gerçekten o zaman aşağıdaki seçeneği uygulayın başka denetleyicisinden denetleyici yöntemini erişmek istiyorsanız belgelerine Service documentation

bkz bir kontrolör. Yöntemi çıkarmanız, bir servis oluşturmanız ve çağırmanız gerekir. örneğin bir yönerge kullanıldığında http://plnkr.co/edit/FQnthYpxgxAiIJYa69hu?p=preview

+0

Yardım için teşekkürler :) – Mayur

0

kontrol bir kurucu, yeni bir örneğini oluşturur: Bu da birbirinden kod ayrıştırarak daha sınanabilir

(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(); 
      } 
     ]); 
})(); 

örnek yapacaktır.

Hala senin denetleyicileri sadece bunu, aynı kapsamda olduğu varsayıldığında, ne istediğini yapabilir: Bir çocuk kapsamı izole olmasaydı onlar, aynı kapsamda olmalıdır

Not hala işe yarayabilir . yönerge tanımı:

{ 
    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(); 
    } 
} 

Bu çalışması gerekir.