これを理解してもらえますか?メソッド(&)とモデル(=)バインディングの代わりに親 'vm'オブジェクトをカスタムディレクティブに渡す角度
私は、コントローラに含まカスタムディレクティブを持っていると私は、複数のpages.Theディレクティブのテンプレートは、ボタンが含まれていると、それに対応するアクションがディレクティブが含まれているコントローラで処理される間で同じディレクティブを使用します。
Controller
------------------------------------------------------------------------
angular
.module('test')
.component('approval', {
template: '<data-table scopeObj ="vm"></data-table>',
controller: 'PendingApprovalsController',
controllerAs: 'vm'
})
.controller('approvalController', approvalController);
approvalController.$inject = ['$scope'];
/* @ngInject */
function approvalController($scope) {
var vm = this;
vm.search1 = function(val) {
console.log("search1::", val);
};
vm.search2 = function(val) {
console.log("search2::", val);
};
vm.search3 = function(val) {
console.log("search3::", val);
};
vm.search4 = function(val) {
console.log("search4::", val);
};
vm.search5 = function(val) {
console.log("search5::", val);
};
}
Directive
---------------------------------------------------------------------
angular.module('test')
.directive('dataTable', dataTable)
.controller('dataTableController', dataTableController);
function dataTable() {
return {
scope: {
scopeObj: '='
},
controller: 'dataTableController',
controllerAs: 'vm',
template: '<button class="btn-default" ng-click="scopeObj.search1('search1')">Button1</button> <button class="btn-default" ng-click="scopeObj.search2('search2')">Button2</button>+
<button class="btn-default" ng-click="scopeObj.search3('search3')">Button3</button><button class="btn-default" ng-click="scopeObj.search4('search4')">Button4</button>'
};
}
dataTableController.$inject = ['$scope'];
function dataTableController($scope) {
var vm = this;
}
1.ディレクティブの範囲をfalseにして、複数のページにわたってディレクティブを再利用できますか?
2.Can I代わり
<data-table method1="vm.search1(val)" method2="vm.search2(val)" method3 ="vm.search3(val)" method4="vm.search1(val)"></data-table>
ような個々のメソッドを通過し、指令
スコープ内にそれらにアクセスするためのコントローラ指令に 'VM' オブジェクトを渡す:{ 法1: '&'、方法2 : '&'、法3: '&'、法4: '&' }
私はあまりにも多くの方法を持って処理する。
クリスチャンのご協力ありがとうございます。いくつかの質問があります。1.メソッドバインディングの代わりに "vm"オブジェクトをディレクティブに渡すと、パフォーマンスが低下します。 2. "vm"オブジェクトをディレクティブに渡す代わりに、スコープを使用して親のスコープにアクセスし、複数のページでディレクティブを再利用できるようにすることができますか? – Mano
パフォーマンスの最大限の向上のためには、 'testDirective'のテンプレートで' scope-obj'を設定するときに '::'を追加して**ワンタイムバインディング**を使用してください(私はこの変更で答えとJSFiddleを更新しました)。この設定は不要なウォッチャーを設定しないため、パフォーマンスには影響しません。 'scope'を' false'に設定することはできますが、これを行うことはできますが、アップグレードを簡単にすることができるときはいつでもAngular 2 +のコンポーネントアーキテクチャに固執したいのでお勧めしません(範囲継承はありません角度2+)。 'statTable'を' directive'とは対照的に 'component'として設定することも良い考えです。 –