1

私がちょうど逃したこれへの簡単な答えがあると確信しています。

http://jsfiddle.net/jonathanwest/pDRxw/3/

基本的に、私のディレクティブには、ディレクティブ自体の外部にあるコントローラーで常に同じメソッドを呼び出すコントロールが含まれます。上記のフィドルからわかるように、controlディレクティブのメソッドで属性を定義することでこの作業を行うことができますが、そのメソッドは常にディレクティブ内の同じボタンから呼び出されるため、定義する必要はありません呼び出すメソッド。代わりに、ディレクティブはedit、そのボタンが押されたときにコントローラーメソッドを呼び出すことを知っている必要があります。したがって、の定義は次のcontrolようになります。

<control title="Custom Title" />

どうすればこれを達成できますか?

4

2 に答える 2

5

$parent実際、これを直接使用することは、ディレクティブを定義する方法として推奨される方法ではないと思います。実際には、親コントローラーから呼び出すことができる関数に目に見える依存関係がないため、それらを再利用するのが少し難しくなります。

なぜこれが必要なのか実際のユースケースはわかりませんが、control何度か使用し、一般的な動作を定義する一連の属性をコピーして貼り付けたくないと思います。

この場合、もう少し他のアプローチをお勧めします。その動作を定義するディレクティブコンテナを追加すると、制御にはこのディレクティブが依存関係として必要になります。

myApp.directive('controlBehavior', function() {
    return {
        restrict: 'E',
        scope: {
            modifyfunc: '&'
        },        
        controller: function($scope, $timeout) {
            this.modifyfunc = $scope.modifyfunc;
        }
    };
});
myApp.directive('control', function() {
    return {
        restrict: 'E',
        require: '^controlBehavior',
        replace: true,
        scope: {
            title: "@"
        },
        template : '<div>{{title}}<button ng-click="edit()">Edit</button></div>',
        link: function(scope, element, attr, behavior) {            
            scope.edit = behavior.modifyfunc;   
        }            
    }
});

このアプローチを示すためのフィドルは次のとおりです。http://jsfiddle.net/7EvpZ/4/

于 2013-01-28T10:03:23.503 に答える
3

$parent現在のスコープのプロパティを使用して、親スコープにアクセスできます。

http://jsfiddle.net/XEt7D/

于 2013-01-28T09:17:14.937 に答える