angularJS controller之间的通信

1、event
这里可以有两种方式,一种是$scope.$emit,然后通过监听$rootScope的事件获取参数;另一种是$rootScope.$broadcast,通过监听$scope的事件获取参数。
这两种方法在最新版本的Angular中已经没有性能区别了,主要就是事件发送的方向不同,可以按实际情况选择。
[code lang=”js”]
/******* example ****/
///////子级传递数据给父级
// 子级传递
$scope.$emit(‘transferType’, "我要发送给父");

// 父级接收
$scope.$on(‘transferType’, function(event, data) {
$scope.transferType = data;
//console.log(data),接收到的值
};

/////// 父级传递数据给子级
// 父级传递
$scope.transferType = ”;
$scope.$broadcast(‘transferType’, "我要发送给子");

// 子级接收
$scope.transferType = ”;
$scope.$on(‘transferType’, function(event, data) {
$scope.transferType = data;
//console.log(data),接收到的值
}
[/code]

2、service
可以创建一个专用的事件Service,也可以按照业务逻辑切分,将数据存储在相应的Service中。

3、$rootScope
这个方法可能会比较dirty一点,胜在方便,也就是把数据存在$rootScope中,这样各个子$scope都可以调用,不过需要注意一下生命周期

4、直接使用$scope.$$nextSibling及类似的属性
类似的还有$scope.$parent。这个方法的缺点就更多了,官方不推荐使用任何$$开头的属性,既增加了耦合,又需要处理异步的问题,而且scope的顺序也不是固定的。不推荐

另外就是通过本地存储、全局变量或者现代浏览器的postMessage来传递参数了,除非特殊情况,请避免这类方式。

发表评论

邮箱地址不会被公开。 必填项已用*标注