2016-05-31 8 views
0

私の角形アプリケーションでは、アラートのリストを処理するalert-serviceがあります。次に、すべてのアラートをページにレンダリングするディレクティブを作成します。私は、UIのブートストラップコンポーネントを使用します。テンプレートでjs-callを使用したディレクティブ - メソッドが呼び出されない

しかし、警告の閉じるボタンは、メソッドを呼び出すことはありません。

.directive('someAlert', ['alertService', function (alertService){ 
     var templateString = '<uib-alert ng-repeat="alert in vm.alerts" type="{{alert.type}}" close="closeAlert($index)">{{alert.msg}}</uib-alert>'; 
    return { 
     restrict: 'E', 
     template: templateString, 
     scope: true, 
     controller: function(){ 
      var vm = this; 

      vm.alerts = alertService.get(); 

      vm.closeAlert = function (index) { 
       console.log('closeAlert within directive controller called'); 
       alertService.closeAlertIdx(index); 
      } 
     }, 
     controllerAs: 'vm', 
     replace: true 
    } 
}]); 

答えて

0

でこれを試してみてください私は、アラート・インスタンスに直接closeメソッドを追加しました。その後、alert.close()は期待どおりに動作しています。ニースのソリューションが見つかりました:alertserviceと少しmodified

0

templateString

close="vm.closeAlert($index)" 
+0

投稿する前にそのアイデアがありました。しかし、テンプレートのメソッドの前にcontrollerAsの名前を追加し、そのディレクティブを使用するビューのコントローラーにメソッドが宣言されていると、呼び出されることがわかりました。これは私が望んでいたものではありません。 – karlis

+0

申し訳ありませんが、私は2番目の文を理解していません。あなたはそれを言い換えることができますか? – bert

+0

OK、しよう: 'hello.html'ビューとこのビュー 'hello.controller.js'のコントローラがあるとします。我々は、例えば、 VM。このビューにalertディレクティブを追加し、alert-directiveのcontrollerAs名もvmであれば、ディレクティブ(vm.close ...)からの呼び出しはhello.controller.jsに行きます。私が望むもの(またはそれをどうするべきか) – karlis

関連する問題