2016-06-21 13 views
0

私は$スコープを使用しています$ $ rootScopeをトリガするために、私のListControllerで発光$メインコントローラでのイベントに(1.3角度):。。なぜrootscope.onがトリガーされないのですか?

(function() { 
    'use strict'; 

    angular 
     .module('mymodule.faultlist') 
     .controller('MainController', ['$rootScope', function ($rootScope) { 
      $rootScope.$on('newViewLoaded', function (event, metadata) { 
       $rootScope.metadata = metadata; 
       console.log('hello metacontroller metadata', metadata); 
      }); 

     }]) 
     .controller('ListController', ['faultlistservice', 'faultListConstants', '$scope', '$timeout', '$rootScope', 
      function (faultlistservice, faultListConstants, $scope, $timeout, $rootScope) { 

       $timeout(function() { 
        $scope.$emit('newViewLoaded', { 
         'title': faultListConstants.meta.title, 
         'description': faultListConstants.meta.description 
        }); 
       }, 100); 

      }]); 
})(); 

これはindex.htmlには、おおよそ次のようになります。

. 
. 
<head ng-controller="MainController"> 
<div class="container main-content" ui-view > 
</div> 
.. 

これはトリガーされません。私は$ rootScope。$をブロック上でListControllerに移動してみました。そして、$ rootScope。$ onがトリガーされました。 MainControllerでこれが機能しないのはなぜですか?またはこれを実装するより良い方法はありますか?

+1

@TheHeadRush同じ問題ですね!!! –

+0

ListControllerならMainControllerの親ですか?あなたはHTMLを共有できますか? –

+0

はいMainControllerは先頭に定義されています。つまり、headタグで定義されています。 ListControllerは、ui-view(ui-router)内にあります。 MainControllerはstateproviderで定義されていません。 –

答えて

0

あなたのコードがhttp://plnkr.co/edit/hsl3l6rTJd1SUDgaijCy?p=preview

に動作します私はあなたの問題はあなたがそう<head ng-controller="MainController">この行はngApp外にある、htmlタグのないアプリをngのしていることになるかもしれないと思います。

+0

良いピックアップありがとう! –

0

あなたのコードはplunkrは、あなたがあなたの元のコードで動作するように、この例を使用する方法を示し、適切http://plnkr.co/edit/nX9KVqY0SZ46Yvf92VAk?p=preview

に動作します。ここでのタイトルと説明は、emit関数の中で引き渡される引数であり、文字列リテラルにすることはできません。

$scope.$emit('newViewLoaded', { 
         'title': faultListConstants.meta.title, 
         'description': faultListConstants.meta.description 
        }) 
関連する問題