2

私はそのうちの一つが、このような別のものを得るためにメッセージをブロードキャストすることを2つのディレクティブがあります(demo

angular.module('app', []); 
angular.module('app').directive('foo', 
    function($rootScope) { 
     return { 
     restrict: 'EAC', 
     link: function($scope, element, attrs, controller) { 
      $rootScope.$on("onStart", function(e,d){ 
       alert(d.message) 
      }); 
     } 
     }; 
    } 
); 
angular.module('app').directive('bar', 
    function($rootScope) { 
     return { 
     restrict: 'EAC',  
     link: function($scope, element, attrs, controller) { 
        $rootScope.$broadcast("onStart", {message: "start"}); 
     } 
     }; 
    } 
); 

このギーブスメッセージを。

私の指示のテンプレートURLが必要です。このように設定してください(demo)。

angular.module('app').directive('foo', 
    function($rootScope) { 
     return { 
     restrict: 'EAC', 
     templateUrl: "tpl.html", 
     link: function($scope, element, attrs, controller) { 
      $rootScope.$on("onStart", function(e,d){ 
       alert(d.message) 
      }); 
     } 
     }; 
    } 
); 

ただし、現在アラートには入力されません。

答えて

0

link関数を実行するには、Angularにテンプレートが必要です。しかし、テンプレートはHTMLファイルから非同期にロードされるようになりました。したがって、最初の指令のリンク関数が実行される前にメッセージがブロードキャストされ、したがってrootScopeのリスナーが作成される前にブロードキャストされます。

+0

の代わりにtemplateを使用することができ、この問題のための任意の解決策はありますか? – barteloma

+0

これは間違っているようですが、 'onStart'リスナーの登録をfooディレクティブのreturn文の前に置くことができます。それはうまく動作しますが、非常にハッキーです。さらに、 'link'関数に渡すすべてのパラメータにアクセスすることはできません。 – gerrit

0

ソリューションはtemplateUrl

template: "<div>Content of the template.</div>" 

EXAMPLE

+0

ですが、テンプレートのコンテンツは非常に長くなります。指令コントローラはリンク機能の前に動作します。それは歓迎されていません。 – barteloma

関連する問題