2015-01-23 16 views
8

Với đoạn mã sau:

  var msg = { 
       field1: val1, 
       field2: val2, 
       // more fields 
     }; 

     $scope.$broadcast("EventName", msg); 

Người tiêu dùng sự kiện nhận được một con trỏ đến msg hoặc một bản sao?

+0

nó luôn gửi tham chiếu. –

+0

đó là một câu hỏi hay! –

Trả lời

12

Người tiêu dùng sự kiện nhận con trỏ cho dữ liệu sự kiện.

Ví dụ:

<div ng-controller="MyCtrl"> 
    <input type="text" ng-model="name.name"/> 
    <button ng-click="broadcast()">Broadcast event</button> 
</div> 
<div ng-controller="MyCtrl2"> 
    <input type="text" ng-model="name2.name"/> 
</div> 

function MyCtrl($scope,$rootScope) { 
    $scope.name = {name: "MyCtrl"}; 
    $scope.broadcast = function(){ 
     $rootScope.$broadcast('someEvent', $scope.name); 
    }; 
} 

function MyCtrl2($scope,$rootScope) { 
    $scope.name2 = null; 
    $scope.$on('someEvent', function(event, data){ 
     $scope.name2 = data; 
    }); 
} 

Xem này JSFiddle cho một cuộc biểu tình về điều đó.

Chỉ cần phát giá trị từ trường input đầu tiên bằng cách sử dụng nút và sau đó cố gắng thay đổi giá trị của bất kỳ trường input nào.

+0

điều này có nghĩa là nếu tôi thay đổi đối tượng đã nhận được trong bộ điều khiển thứ hai, đối tượng được gửi trong bộ điều khiển đầu tiên cũng được thay đổi không? – ps0604

+0

Tôi có thể xem nó ngay bây giờ, ví dụ tốt. cảm ơn – ps0604

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