2016-03-26 12 views
2

Ich bin mit einem Problem fest. Ich habe einen Controller "searchCtrl", es müssen einige Scope-Objekte in Direktiven verwendet werden.Wie teile ich einen Controller in mehreren Direktiven?

Wenn es eine Richtlinie ist, kann es als Controller verwendet werden: "searchCtrl". Aber mehrere Komponenten müssen searchCtrl verwenden, das von der dritten Partei bereitgestellt wird (das Ändern der Strg ist nicht vorzuziehen).

file 1; 
angular.module('app.core') 
    .directive('profilePage', DirectiveFunction1); 
function DirectiveFunction1 (config,service) { 

    var directive = { 
     restrict: 'E', 
     templateUrl: 'components/search1.html', 
     controller: 'searchCtrl', 
     link:function (scope, element, attrs) {} 

     } 
     return directive; 
} 

file 2; 
angular.module('app.core') 
    .directive('contactPage', DirectiveFunction2); 
function DirectiveFunction2 (config,service) { 

    var directive = { 
     restrict: 'E', 
     templateUrl: 'components/search2.html', 
     controller: 'searchCtrl', 
     link:function (scope, element, attrs) {} 
     } 
     return directive; 
} 

Mein seachCtrl sieht aus wie

angular.module('asApp').controller('searchCtrl', ['$scope', 'service', function($scope, AppService, qVarService) { 

axisAPI.object() 
     .app(service.app()) 
     .qId('abcd') 
     .on('create',function(object) { 
      object.paint(); 
     }).on('paint',function(data){ 
      $scope.$apply(function(){ 
            $scope.profile = data.profile; 
            $scope.contacts = data.profile; 
       }) 
     }).create(); 

so 2-Komponenten-Profile und Kontakte und eine gemeinsame Steuerung. Gemäß meiner Funktionalität wird "searchCtrl" zweimal ausgeführt und erhält die Antwort zweimal, da ich in zwei Direktiven statt dessen gesetzt habe, wenn der verwendete ng-Controller in Direktiven-HTML-Dateien genauso funktioniert.
Ohne wie oben, wie kann ich {{profile}} und {{contacts}} in verschiedenen Direktiven verwenden.

Irgendwelche schlagen vor, es in betterway zu tun.

+1

'searchCtrl' sollte stattdessen ein Dienst sein, da sie freigegeben sind. Controller werden instanziiert, wenn sie angefordert werden. Haben Sie die Kontrolle über die 'searchCtrl'? – mrahhal

+0

Ich bin verwirrt, wenn du die Kontrolle hast, dann hast du die Wahl, oder? Wenn Sie wirklich wollen, dass 'searchCtrl' freigegeben wird, sollten Sie es stattdessen zu einem Dienst machen. – mrahhal

+0

Oh Entschuldigung. Ich bin nicht in der Kontrolle der SearchCtrl. – user2587222

Antwort

0

Wenn Sie die Steuerung nicht kontrollieren können, können Sie den Code nicht kopieren und als Service oder Fabrik platzieren und dann wiederverwenden? Oder kann es sich ändern?

+0

Coole Idee und andere Gedanken. aber mein Pech kann ich nicht benutzen, weil diese api-Anrufe Controller-basiert sind. Initialisierung sollte in Controllern erfolgen. – user2587222

+0

Kann ich $ watch in Anweisungen verwenden, wenn der Bereich in Controllern aktualisiert wird – user2587222

Verwandte Themen