Angular:$ broadcast和$ emit按值或引用发送消息对象?

ps0*_*604 9 angularjs

给出以下代码:

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

$scope.$broadcast("EventName", msg);
Run Code Online (Sandbox Code Playgroud)

事件使用者收到指向msg或复制的指针?

Art*_*ich 13

事件使用者接收指向事件数据的指针.

例如:

<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;
    });
}
Run Code Online (Sandbox Code Playgroud)

请参阅此JSFiddle进行演示.

只需input使用按钮从第一个字段广播值,然后尝试更改任何input字段的值.