ネストされたディレクティブを実装しようとしています。 innerディレクティブは、ng-clickで関数を呼び出すボタンです。呼び出される関数の名前はモデルで定義されます。ネストされたディレクティブの可変関数名
ここから始めて、ここにはプランナーリンクがあります。 PLUNKER
問題は、ボタンが呼び出される関数を知らないということです。 ng-includeを使って外部ディレクティブ用のテンプレートを使用し、スコープ内に正しく名前が付けられた変数を使用すると、魅力的に機能します。
あなたのためにいくつかのコードスニペット:
のindex.html:
DIRECTIVES
<outer-directive functions="functions" datas="datas"></outer-directive>
<p>{{clicked}}</p>
NG-Include :
<div ng-include src="'outer-template.html'"></div>
外ディレクティブのテンプレート
<div ng-repeat="d in datas">
Hi, {{d}}
<inner-directive
ng-repeat="funct in functions"
text="funct.text"
method="this[funct.method](d)">
</inner-directive>
</div>
コントローラ
app.controller('MainCtrl', function($scope) {
$scope.datas = [0, 1];
$scope.functions = [{
method: 'functOne',
text: 'Funct One'
}, {
method: 'functTwo',
text: 'Funct Two'
}];
$scope.clicked = 'Nothing happend';
$scope.functOne = function(data) {
$scope.clicked = data + ' pressed Funct 1';
}
$scope.functTwo = function(data) {
$scope.clicked = data + ' pressed Funct 2';
}
});
外指令JS
app.directive('outerDirective', function() {
return {
restrict: 'E',
scope: {
functions: '=',
datas: '='
},
templateUrl: 'outer-template.html'
}
});
インナー指令JS
パラメータはオブジェクトとして渡されるべきコントローラに指令からのコールバック関数でapp.directive('innerDirective', function() {
return {
restrict: 'E',
scope: {
method: '&',
text: '=',
datas: '='
},
template: '<button ng-click="method(datas)"> {{text}}</button>'
}
});
ですが、私は$に放出すると$で行くことにしました([この質問](https://stackoverflow.com/questions/14502006/working-を参照してくださいwith-scope-emit-and-scope-on)) –