【发布时间】:2015-01-04 21:51:00
【问题描述】:
您有一个名为“DataService”的服务,其中包含一个闭包。
闭包属性可以通过get/set/display(ClosurePropertyName)获取/设置/显示:
var app = angular.module('app',[]);
app.service('DataService', [function(){
var data = this;
(function initialize() {
var closure = {
prop: 'etc',
otherProp: [],
diffProp: {
a: 'b',
c: 'd'
}
}, keys = Object.keys(closure);
// ex: data.displayProp()
// returns : Displaying etc
data.displayProp = function () {
return 'Displaying: ' + closure.prop;
}
// ex: data.getProp()
// returns : etc
data.getProp = function () {
return closure.prop;
}
// ex: data.setProp("derp");
// becomes: closure.prop = "derp"
data.setProp = function (val) {
closure.prop = val;
}
data.allProps = function () {
var obj = {};
for (var i = 0; i < keys.length; i++) {
obj[keys[i]] = closure[keys[i]];
}
return obj;
}
})();
}]);
您有访问此服务的控制器:
app.controller('CntrlA', ['$scope', 'DataService', function($scope, DataService){
var props = DataService.allProps();
this.props = props;
this.changeProp = function(val){
DataService.setProp(val);
}
$scope.CntrlA = this;
return $scope.CntrlA;
}]);
app.controller('CntrlB', ['$scope', 'DataService', function($scope, DataService){
var props = DataService.allProps();
this.changeOtherProps = function(arr){
DataService.setOtherProp(arr);
}
$scope.CntrlB = this;
return $scope.CntrlB
}]);
还有简单的html:
body[ng-app="app"]
div[ng-controller="CntrlA as aa"]
button[ng-click="aa.changeProp('herp a derp')"]
div "{{aa.props}}"
div[ng-controller="CntrlB as bb"]
button[ng-click="bb.setOtherProp(['all', 'the', 'things'])"]
div "{{bb.props}}"
当值发生变化时,如何将更改应用于两者?我知道这必须很简单,但是 $scope.$watch 不起作用。
【问题讨论】:
标签: angularjs data-binding binding