2016-05-11 15 views
0

私は、それぞれの要素にツールディレクティブ(選択、編集、削除ボタン)があるリストディレクティブ(実際にはテーブルですが、それは関係ありません)を持っています。 toolsディレクティブは各アクションのコールバックを取得するので、特定のコントローラは各アクションを個別に実装できます。現在、選択した項目をコントローラのコールバックに渡す方法はわかりません。 これに関するアイデアは?角度ネストされたディレクティブのコールバック

ツールディレクティブ:

Javascriptを: ここで私は、コールバック

app.directive('itemTools', function() { 
return { 
    restrict: 'AE', 
    transclude: true, 
    scope: { 
    item: '=', 
    selectCallback: '&', 
    editCallback: '&', 
    deleteCallback: '&', 
    cloneCallback: '&', 
    activateCallback: '&', 
    deactivateCallback: '&', 
    }, 

    link: function(scope, element, attr) { 

    }, 
    templateUrl:'templates/common/item.tools.html', 
    controller: function($rootScope, $scope) { 
    } 
} 

}を定義します)。

HTML:

<div> 
<button ng-click="selectCallback({id: item.id})"> 
</button> 
<button ng-click="editCallback({id: item.id})"> 
</button> 
<button ng-click="deleteCallback({id: item.id})"> 
</button> 
<button ng-click="cloneCallback({item: item})"> 
</button> 
<button ng-click="activateCallback({item: item})"> 
</button> 
<button ng-click="deactivateCallback({item: item})"> 
</button> 
</div> 

リストディレクティブ: これらのコールバックがアイテムツール

app.directive('moduleList', function() { 
return { 
    restrict: 'E', 
    scope: { 
    modules: '=', 
    selectCallback: '&', 
    editCallback: '&', 
    deleteCallback: '&', 
    cloneCallback: '&', 
    activateCallback: '&', 
    deactivateCallback: '&', 
    }, 
    templateUrl:'templates/module/module.list.html', 
    controller: function($scope) { 

    } 
} 

})にさらに処理されます。

HTML:

<table class="table table-responsive"> 
    <tbody> 
    <tr ng-repeat="item in items | orderBy:orderByField:reverseSort> 
     <td class="text-center"> 
     SOME DATA OF THE OBJECT.... 
     </td> 
     <td> 
     <item-tools 
     item="item" 
     select-callback="selectCallback({id: item.id})" 
     edit-callback="editCallback(item.id)" 
     delete-callback="deleteCallback(item.id)" 
     clone-callback="cloneCallback(item)" 
     activate-callback="activateCallback(item)" 
     deactivate-callback="deactivateCallback(item)"> 
     </item-tools> 
     </td> 
    </tr> 
    </tbody> 
</table> 

私は、コントローラの機能が呼び出されることを、これまでのところ、すでにそれを得たが、私はどのように選択したアイテム自体に渡すことは考えています。

ありがとうございます。

+0

一般的にあなたがディレクティブを入れ子にしている場合、あなたは、角度の例を参照してください(親ディレクティブコントローラをリンクする必要があります。 //plnkr.co/edit/xgrXXIbEQvqiGSQRebYQ?p=preview)。子ディレクティブが話すための親ディレクティブのAPIを基本的に開きます。あなたの親ディレクティブがコントローラと通信するようにするには、$ broadcastを使用してコントローラ内のイベントをリスンすることができます。理にかなっている? – panzhuli

+0

ありがとう、イベントを使用するための素晴らしいアイデア。しかし、** $放送**の代わりに、私は** $ emit **を好みます。 – Dimi

答えて

0

子ディレクティブは子供に親ディレクティブコントローラを割り当てることによって、親にリンクされています。https:

// parent directive 
app.directive('parentDirective', function() { 
    return { 
     controller: function() { 
      this.hello = function() { 
       return 'Hello World'; 
      }; 
     } 
    }; 
}); 

// child directive 
// you require the parent controller by the ^ctrlName 
app.directive('childDirective', function() { 
    return { 
     require: '^parentDirective', // require the parent controller 
     link: function(scope, element, attrs, ctrl) { 
      // you have access to the parent API 
      ctrl.hello(); // returns 'Hello World' 
     } 
    }; 
}); 
関連する問題