2016-04-15 5 views
0

ページネーションとフィルタを制御する要素のリストを作成する指示がありました。私はアプリケーションのいくつかの点でそれを使用しています。angularjsディレクティブ機能を拡張する最も良い方法は何ですか?

ディレクティブにカスタムメソッドを追加する最も良い方法は何ですか。

例:

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 
     } 
    } 
} 

マイディレクティブのテンプレートは次のようになります。

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

    <div ng-transclude></div> 

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

そして、私はこのようなディレクティブを使用します。

<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> 

私はコントローラを作成するかどうかわかりませんディレクティブの内部は良い習慣であるか、これを達成するためのより良い方法があります。

ありがとうございます。

答えて

0

あなたはすでにディレクティブのコントローラは、その使用する必要がdestination.You指定されている:

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

をしかし、ええ、あなたが入れ子にしていることを指示を行っている場合は、その優れたdirectives.Although内部のコントローラを与えることができます。

+0

しかし、私はディレクティブを6回使用し、私はそれを使用するたびに、私は仕事を専門にするためのカスタムメソッドが必要です。それは他のコントローラの機能をより専門化するのではないのですか? – Sergio

+0

それは私が言っていたことです。関数を持つサービスを持つことができます。あなたはそれを必要なコントローラに注入し、その機能を使用します。 –

+0

はい私はあなたのサービス/工場で持つことができるビジネスロジックとは対照的に、that.Allのバインディングロジックはコントローラの内部になければならないサービスや工場を持つことができることに同意します。 –

0

複数のコントローラ間で共有しようとするものなら、サービスを作成してそれを使用するコントローラに注入することができます。

+0

いいえ、それは私がディレクティブの特定のインスタンスを特化する必要があるものです – Sergio

関連する問題