2016-09-06 6 views
0

私はプロファイル更新の指示があり、親スコープからの更新アクションをトリガーしたいと思います。親コントローラへの指示アクションをバインドします。AngularJS

main.js

angular.module('app') 
.directive('profile',{ 
    scope: { 
     updateFromDirective: "=" 
    }, 
    template: '<form><input ng-model="name"/></form>', 
    controller: function(){ 
     this.updateFromDirective = function(){ 
      /* update here */ 
     }; 
    } 
}) 
.controller('Ctrl', function(){ 
    this.updateFromController = function(){ 
     if(condition){ 
      /* how do I call updateFromDirective here ??? */ 
     } 
    }; 
}); 

index.htmlを

<div ng-controller="Ctrl"> 
    <profile updateFromDirective="updateFromController"></profile> 
    <button ng-click="updateFromController()">Update</button> 
</div> 
+0

以下のような角度で与えパブリッシュ/サブスクライバモデルを使用することができますか?エラーは何ですか? –

+0

update trigger updateFromControllerをクリックしてからupdateFromDirectiveを呼び出すと、updateFromDirectiveをrootScopeに渡したときに動作します – Ayoub

+0

共有するplunkerの例で、エラーがどこにあるのかを確認します。 –

答えて

2

'&'を使用してディレクティブにあなたの関数の参照を渡す場合:私のコードのように見えるものをここで あなたはこのように渡しています他の210あなたのケースで今

を(両方とも動作します)updateFromControllerため'='を使用

注:私はあなたがあなたの機能を持っているので、$スコープを使用したくないと仮定していますこの

とコントローラにコールバックとしてそれを渡す必要がありディレクティブからコントローラ機能を呼び出すには、以下

のようなそのコールバックを呼び出すことができます

あなたのhtmlが

<div ng-controller="Ctrl as vm"> 
<profile controllercallback="vm.updateFromController()"></profile> 

以下のようになります。しかし、ここであなたのボタンは、ディレクティブ自体にあります。

あなたのボタンがあなたのディレクティブの一部にしたくない場合、あなたはここで行う必要があり、正確にどのような

angular.module('app',[]) 
.controller('Ctrl', function($scope){ 
    this.updateFromController = function(){ 
     $scope.broadcast('calldirective'); 
    }; 
}).directive('profile',function(){ 
    return{ 
    template:'<input ng-model="name"/>', 
    controller:function($scope){ 
     $scope.$on('calldirective', function() { 
     alert('In Directive') 
     }); 

    } 



} 

}) 
+0

updateFromController内でupdateFromDirectiveを呼び出すにはどうすればよいですか? – Ayoub

+0

ありがとう@リシですが、問題はボタンがディレクティブのテンプレートにないことです – Ayoub

+0

あなたのケースで私の答えが更新されました.. –

関連する問題