2016-04-15 13 views
0

Ich habe eine Direktive, um eine Liste von Elementen zu erstellen, um Seitenumbruch und Filter zu steuern, ich benutze es in mehreren Punkten meiner Anwendung.Was ist der beste Weg, die Funktionalität der angularjs-Direktive zu erweitern?

Ich möchte wissen, was der beste Weg ist, der Richtlinie benutzerdefinierte Methoden hinzuzufügen.

Beispiel:

angular.module('example').directive('list', function() { 
    return { 
     scope: { 
      elements: '=ngModel', 
      filters: '=?' 
     }, 
     restrict: 'E', 
     transclude: true, 
     templateUrl: '/static/templates/list.html', 
     controller: function() { 
      // Some stuff of pagination and filters functions 
     } 
    } 
} 

Meine Richtlinie Vorlage wie folgt aussieht:

<div class="list"> 
    <!-- Pagination stuff --> 

    <div ng-transclude></div> 

    <!-- Pagination stuff --> 
</div> 

Und ich verwende die Richtlinie wie folgt aus:

<list elements="elements"> 
    <div ng-controller="CustomMethodsController"> 
     <div class="col-xs-6"> 
      {{result.element_1}} 
     </div> 
     <div class="col-xs-6"> 
      {{result.element_2}} 
     </div> 
    </div> 
</list> 

Ich weiß nicht, ob ein Controller erstellen innerhalb einer Richtlinie ist eine gute Praxis oder es gibt einen besseren Weg, dies zu erreichen.

Vielen Dank im Voraus.

Antwort

0

Sie haben angegeben, bereits ein Controller in der Richtlinie, dass die Verwendung destination.You benötigen:

 scope: { 
     elements: '=ngModel', 
     filters: '=?' 
    }, 
    restrict: 'E', 
    transclude: true, 
    templateUrl: '/static/templates/list.html', 
    **controller: function() { 
     // Some stuff of pagination and filters functions 
    }** 

Aber ja Sie können Controller innerhalb directives.Although seine besseren geben, wenn Sie tun, dass Sie Richtlinien verschachtelt haben können .

+0

Aber wenn ich die Direktive 6 mal benutze und jedes Mal wenn ich sie benutze, brauche ich eine benutzerdefinierte Methode, um die Arbeit zu spezialisieren, Soll ich alle benutzerdefinierten Funktionen in die Direktive einfügen? Es ist nicht besser spezialisieren, dass Funktionen in anderen Controller? – Sergio

+0

Das habe ich gesagt. Sie können einen Dienst mit Funktionen haben. Sie injizieren es in die Controller, die Sie brauchen, und nutzen Sie dessen Funktionen. –

+0

Ja, ich stimme zu, dass Sie einen Service oder eine Fabrik dafür haben können. Ihre bindende Logik sollte innerhalb der Steuerung sein, während die Geschäftslogik, die Sie in Ihrem Service/Fabrik haben können. –

0

Wenn Sie etwas über mehrere Controller gemeinsam nutzen möchten, können Sie einen Service erstellen und ihn in die Controller injizieren, die ihn verwenden.

+0

Nein, ich muss eine bestimmte Instanz der Richtlinie spezialisieren – Sergio