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