Angularjs 角度传感器中控制器之间的通信
我熟悉以下实现控制器之间通信的方法 还有其他的吗?是否有更好的方法/最佳实践Angularjs 角度传感器中控制器之间的通信,angularjs,angularjs-controller,Angularjs,Angularjs Controller,我熟悉以下实现控制器之间通信的方法 还有其他的吗?是否有更好的方法/最佳实践 $broadcast/$emit 或者,从这个角度来看: <button ng-click="$broadcast('SomethingHappened', data)">Do Something</button> 或者,在代码中 .controller("ChildOfChild", function($scope){ $scope.someP
$broadcast
/$emit
或者,从这个角度来看:
<button ng-click="$broadcast('SomethingHappened', data)">Do Something</button>
或者,在代码中
.controller("ChildOfChild", function($scope){
$scope.someParentFunctionInScope();
});
优势:
- 适用于从上到下的数据传播
- 不适合从下到上,因为它需要对象(与基本体相反)
- 调用祖先函数会创建紧密耦合
- 除非使用共同的祖先,如
,否则在兄弟姐妹之间不起作用$rootScope
范围继承+
$watch
控制器仅对作用域公开数据中的更改作出反应,从不调用函数
.controller("Parent", function($scope){
$scope.VM = {a: "a", b: "b"};
$scope.$watch("VM.a", function(newVal, oldVal){
// react
});
}
优势:
- 适用于非由控制器创建的子范围,如
ng repeat
- 对于一次性事件根本不起作用
- 不太可读的代码
- 具有专门功能的共享服务
- 更一般的酒吧/酒吧服务
$rootScope
var app = angular.module('myApp', []);
var parent = function($scope){
$scope.parent = {
parentData: 'some data'
}
};
// you could do some prototyping as well
//parent.prototype.parent2 = {
// parentData: 'some more data'
//};
var child = function($scope){
parent.call(this, $scope);
//$scope.parent2 = this.parent2; here is how you access that data.
};
child.prototype = Object.create(parent.prototype);
child.prototype.constructor = child;
app.controller('parent', parent);
app.controller('myController', child);
此方法为您提供了一个优势:
- 适用于同级作用域,不需要DOM结构
.controller("Parent", function($scope){
$scope.VM = {a: "a", b: "b"};
$scope.$watch("VM.a", function(newVal, oldVal){
// react
});
}
var app = angular.module('myApp', []);
var parent = function($scope){
$scope.parent = {
parentData: 'some data'
}
};
// you could do some prototyping as well
//parent.prototype.parent2 = {
// parentData: 'some more data'
//};
var child = function($scope){
parent.call(this, $scope);
//$scope.parent2 = this.parent2; here is how you access that data.
};
child.prototype = Object.create(parent.prototype);
child.prototype.constructor = child;
app.controller('parent', parent);
app.controller('myController', child);