Javascript 在兄弟姐妹Angularjs之间共享数据

Javascript 在兄弟姐妹Angularjs之间共享数据,javascript,angularjs,Javascript,Angularjs,我有这样的节点 3 ------------ | | ----- ------ 1 | 2 | 我想要1和2之间的通信 我在stackoverflow上找到了一个方法 two.js $scope.$emit('messageTwo', someValue(s)); $scope.$emit('messageOne', someValue(s)); three.js $sco

我有这样的节点

             3
       ------------
       |          |
     -----     ------
     1   |     2    |
我想要1和2之间的通信

我在stackoverflow上找到了一个方法

two.js

$scope.$emit('messageTwo', someValue(s));
$scope.$emit('messageOne', someValue(s));
three.js

$scope.$on('messageTwo', function( event, data ){
  $scope.$broadcast( 'messageTwo', data );
});
$scope.$on('messageTwo', someValue(s));
$scope.$parent.$on('messageOne', function( event, data ){
  console.log( data );
});
$scope.$parent.$broadcast('messageOne', someValue(s));
$scope.$on('messageOne', function( event, data ){
  console.log( data );
});
one.js

$scope.$on('messageTwo', function( event, data ){
  $scope.$broadcast( 'messageTwo', data );
});
$scope.$on('messageTwo', someValue(s));
$scope.$parent.$on('messageOne', function( event, data ){
  console.log( data );
});
$scope.$parent.$broadcast('messageOne', someValue(s));
$scope.$on('messageOne', function( event, data ){
  console.log( data );
});
这种方法非常有效。我尝试了下面的选项,效果很好。下面的代码也是正确的吗

two.js

$scope.$emit('messageTwo', someValue(s));
$scope.$emit('messageOne', someValue(s));
one.js

$scope.$on('messageTwo', function( event, data ){
  $scope.$broadcast( 'messageTwo', data );
});
$scope.$on('messageTwo', someValue(s));
$scope.$parent.$on('messageOne', function( event, data ){
  console.log( data );
});
$scope.$parent.$broadcast('messageOne', someValue(s));
$scope.$on('messageOne', function( event, data ){
  console.log( data );
});

它确实可以工作,但是当作用域1被销毁时,您需要手动注销侦听器

var messageListener = $scope.$parent.$on('messageOne', ...)
$scope.$on('$destroy', messageListener)
您也可以通过另一种方式在父作用域上广播,甚至
$rootScope

two.js

$scope.$on('messageTwo', function( event, data ){
  $scope.$broadcast( 'messageTwo', data );
});
$scope.$on('messageTwo', someValue(s));
$scope.$parent.$on('messageOne', function( event, data ){
  console.log( data );
});
$scope.$parent.$broadcast('messageOne', someValue(s));
$scope.$on('messageOne', function( event, data ){
  console.log( data );
});
one.js

$scope.$on('messageTwo', function( event, data ){
  $scope.$broadcast( 'messageTwo', data );
});
$scope.$on('messageTwo', someValue(s));
$scope.$parent.$on('messageOne', function( event, data ){
  console.log( data );
});
$scope.$parent.$broadcast('messageOne', someValue(s));
$scope.$on('messageOne', function( event, data ){
  console.log( data );
});
如果您需要访问
event.targetScope
中one.js的$scope,那么,$emit是一个不错的选择


如果您只想共享数据,还可以使用共享服务实例或共享父控制器作用域上的变量

如果您想在兄弟姐妹之间共享数据,可以使用服务或工厂

如果介于父到子或子到父之间,则可以使用$broadcast或$emit,或者只使用$rootscope