2013-05-16 76 views
8

我有三個控制器:主,產品,客戶。控制器A是我的'masterpage'的一部分。控制器B和C與位置有關。Angular:爲什麼我的事件處理了兩次?

控制器主:

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和main的addClicked被調用時,我收到兩次警報'添加產品'。有人知道這是爲什麼嗎?

+1

你確定你的頁面中沒有兩個'ng-controller =「ProductController」?你可以發佈HTML嗎? – sh0ber

+0

@ sh0ber是的,我確定。當我搜索'ng-controller =「ProductController」'我只得到一個結果.. – Martijn

+0

當我使用HTML設置你的函數時,一切都按預期工作,所以我認爲你得到了兩個控制器。也許這發生在你的代碼的其他地方,如果不是你的HTML – sh0ber

回答

30

問題是我還有一個控制器在路由中聲明。所以我在我的html頁面上配置了一個控制器,並在路由提供程序中配置了一個。這導致一切執行兩次..

+1

doh,我有這個問題 – meffect

+1

這也幫助了我,謝謝。提示:在可能有多個實例同時運行的對象上聲明事件處理程序時,請務必小心。 – brazorf

相關問題