2016-05-11 27 views
3

私は、コントローラからの関数内部指令をどのように呼び出すかを知る方法を探していました。私はスナップを持っていますが、それゆえ私は角度が新しいので、以下のコードの流れはあまり明確ではありません。コードがどのように機能しているかを誰でも気にしてください。おかげAngularJSコントローラから指令関数を呼び出す方法

<map set-fn="setDirectiveFn(theDirFn)"></map> 
<button ng-click="directiveFn()">call directive function</button> 

scope: { setFn: '&' }, 
link: function(scope, element, attrs) { 
    scope.updateMap = function() { 
     alert('inside updateMap()'); 
    } 
    scope.setFn({theDirFn: scope.updateMap}); 
} 

function MyCtrl($scope) { 
    $scope.setDirectiveFn = function(directiveFn) { 
     $scope.directiveFn = directiveFn; 
    }; 
} 

答えて

7

開始で定義された関数を呼び出します。コントローラーを使用して、このブロックは、コントローラー内の$scopeオブジェクトにsetDirectiveFn()メソッドを作成し、そのパラメーターは単一のパラメーター(directiveFn)を使用し、そのパラメーターを使用しますコントローラ内の$scopeオブジェクトにdirectiveFn()メソッドを作成します。でscope: { setFn: '&' }:あなたのHTML内<map set-fn="setDirectiveFn(theDirFn)"></map>と、この行:ディレクティブそれはディレクティブでscopeオブジェクト上updateMap()メソッドを作成し、setFn()このラインで$scope.setDirectiveFn()方法にマッピングされているメソッドを呼び出している内部

$scope.setDirectiveFn = function(directiveFn) { 
     $scope.directiveFn = directiveFn; 
    }; 

あなたの指示。 scope.updateMap()メソッドを渡しています。これはコントローラの $scope.directiveFn()を効果的にあなたの指示文の scope.updateMap()に設定します。

link: function(scope, element, attrs) { 
    scope.updateMap = function() { 
     alert('inside updateMap()'); 
    } 
    scope.setFn({theDirFn: scope.updateMap}); 
} 

ボタンは、あなたのディレクティブでscope.updateMap()にマッピングされている、あなたのコントローラで$scope.directiveFn()を呼んでいます。

<button ng-click="directiveFn()">call directive function</button> 
+0

uが感謝 –

+0

[ここに行く](https://jsfiddle.net/e21g3r02/)..... jsfiddleで作業バージョンを置くplzzすることができます。 – Lex

4

は、あなたが角度のpubsubで

link: function(scope, element, attrs) { 
    scope.updateMap = function() { 
     alert('inside updateMap()'); 
    } 
    scope.setFn({theDirFn: scope.updateMap}); 

    scope.$on('eventName', function(event, data){ 
     //call directive function here 
    }) 
} 

function MyCtrl($scope) { 

     $scope.$broadcast('eventName', data) 
} 
1

を行うことができます私はこの記事を読んでお勧めします:http://weblogs.asp.net/dwahlin/creating-custom-angularjs-directives-part-2-isolate-scope

基本的には、あなたのディレクティブは、これは何scope: {setFn: '&'}

Isolate Scopeを設定していますこれは、属性(この場合はset-fn)を使用してディレクティブにデータを送信できるときです。あなたのディレクティブで

、scope.setFnは今、あなたのHTML内の属性を経由して、それに送られた機能(setDirectiveFn(theDirFn)

が含まれていますので、scope.setFn({theDirFn: scope.updateMap});

を呼び出すと、

function MyCtrl($scope) { 
    $scope.setDirectiveFn = function(directiveFn) { 
     $scope.directiveFn = directiveFn; 
    }; 
} 
関連する問題