2013-05-16 6 views
8

私は3つのコントローラを持っています:main、product、customer。コントローラAは私の「マスターページ」の一部です。コントローラBおよびCは位置に依存します。メイン角度:イベントが2回処理されるのはなぜですか?

コントローラー:

var MainController = function ($scope, $location, $rootScope, ToolbarService) { 
    $scope.addClicked = function() { 
     ToolbarService.onAddButtonClick(); 
    }; 
}; 

app.controller({ MainController: MainController }); 

製品:

var ProductController = function ($scope) { 

    $scope.$on('handleAddButtonClick', function() { 
     alert('Add product'); 
    }); 
}; 
app.controller({ ProductController: ProductController }); 

顧客:

var CustomerController = function ($scope) { 

    $scope.$on('handleAddButtonClick', function() { 
     alert('Add customer'); 
    }); 
}; 
app.controller({ CustomerController: CustomerController}); 

toolbarService:

app.service({ 
    ToolbarService: function ($rootScope) { 
     return { 
      onAddButtonClick: function() { 
       $rootScope.$broadcast('handleAddButtonClick'); 
      } 
     }; 
    } 
}); 

私の場所が#/productsで、メインのaddClickedが呼び出されると、「製品を追加」という警告が2回表示されます。これはなぜ誰かが手がかりを持っていますか?

+1

あなたのページに2つの 'ng-controller =" ProductController "'がありませんか?あなたはHTMLを投稿できますか? – sh0ber

+0

@ sh0berはい私は確信しています。 「ng-controller = "ProductController"」を検索すると、結果は1つだけです。 – Martijn

+0

HTMLでフィードバックして関数を設定すると、すべて正常に動作するので、どういうわけか、コントローラ。たぶん、あなたのコードではない場合は、あなたのコードの他の場所で発生する – sh0ber

答えて

30

問題は、私もルートでコントローラが宣言されていたことでした。だから、私は自分のhtmlページとルートプロバイダのコントローラを設定していました。これにより、すべてが2回実行されました。

+1

doh、私はこの問題を抱えていた – meffect

+1

これも、ありがとう、助けてくれた。ヒント:複数のインスタンスを同時に実行する可能性のあるオブジェクトに対してイベントハンドラを宣言するときは、常に注意が必要です。 – brazorf

関連する問題