16

Nó sẽ gửi $ phát sóng một lần từ rootScope, nhưng người nghe ($ on) được gọi hai lần.

Trình nghe nằm trong bộ điều khiển và nó sử dụng $rootScope.$on thay vì $scope.$on. Có ai đó đã có vấn đề này?

chỉnh sửa

rootScope:

$rootScope.$broadcast('menuActivateAction' + item.event_name_postfix, item.event_args); 

điều khiển khác:

$rootScope.$on('menuActivateActionPublish', function(event) {}); 
+2

bạn nên cung cấp mã của mình – Grundy

+2

Có thể bạn có hai bộ điều khiển? – kaaposc

+1

Có thể bạn phải loại bỏ trình lắng nghe khi bộ điều khiển bị hủy. Tôi thậm chí còn đăng ký người nghe trong giai đoạn '.run' và không nằm trong bộ điều khiển - để tránh vấn đề auch bộ điều khiển chỉ nên đăng ký người nghe là phạm vi riêng – Michael

Trả lời

20

Kể từ khi bạn đăng ký $ của bạn trên listener trên $ rootScope, nó không bị phá hủy với bộ điều khiển và lần sau bạn khởi động bộ điều khiển, nó sẽ được tạo lại.

Bạn nên tạo người nghe của bạn trên phạm vi điều khiển

$scope.$on('menuActivateActionPublish', function(event) {}); 
+0

Trong trường hợp của tôi về nghe được gọi là gia tăng. –

+1

@UmairKhanzada xin lỗi Tôi không hiểu rằng nhận xét – Tom

+0

nghe '$ rootScope. $ Broadcast ('xyz');' sự kiện khi người dùng đăng nhập và khi người dùng đăng xuất và đăng nhập lại, nó sẽ được nghe tăng dần. chức năng nghe '$ rootScope. $ on ('xyz', function() {console.log ('running')});' –

4

Hãy cẩn thận bạn tránh hai trường hợp của bộ điều khiển có nghĩa là hai người nghe sự kiện, có nghĩa là phương pháp được thực hiện hai lần !! (Ví dụ: sử dụng hai lần 'ng-điều khiển')

1

Để bổ sung cho câu trả lời que1326, làm ví dụ, nếu bạn đang sử dụng ui-router và có cái gì đó như

.state('app.yourpage', { 
      url:'yourPage', 
      views: { 
       '[email protected]': { 
        templateUrl : 'views/yourPage.html', 
        controller : 'YourController' 
       } 
      } 
     }) 

và trong yourPage.html bạn có một ng-controller="YourController as Ctrl", sau đó bạn đang tạo 2 trường hợp của bộ điều khiển: 1 cá thể được tạo bởi cấu hình trạng thái và một phiên bản khác trong html của bạn.

Các vấn đề liên quan