在同级Angularjs之间共享数据

Share data between siblings Angularjs

本文关键字:共享 数据 之间 Angularjs      更新时间:2023-09-26

我有这样的节点

             3
       ------------
       |          |
     -----     ------
     1   |     2    |

我想要1 &2

我在stackoverflow上找到了一个方法,就像

two.js

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

three.js

$scope.$on('messageTwo', function( event, data ){
  $scope.$broadcast( 'messageTwo', data );
});

one.js

$scope.$on('messageTwo', someValue(s));

这个方法非常有效。我尝试了下面的选项,它工作。下面的代码也是正确的吗?

two.js

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

one.js

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

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

var messageListener = $scope.$parent.$on('messageOne', ...)
$scope.$on('$destroy', messageListener)

你也可以反过来,在父作用域甚至$rootScope上广播。

two.js

$scope.$parent.$broadcast('messageOne', someValue(s));

one.js

$scope.$on('messageOne', function( event, data ){
  console.log( data );
});

如果你需要在event.targetScope中访问one.js的$作用域,$emit是一个不错的选择。

如果你只想共享数据,你也可以使用共享服务实例,或者只是在共享父控制器的作用域中使用一个变量。

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

如果它位于父级到子级或子级到父级之间,你可以使用$broadcast或$emit,或者直接使用$rootscope。