클로저가있는 "DataService"이라는 서비스가 있습니다.
폐쇄 속성은 GET/설정/디스플레이 (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가 작동하지 않는다는 것을 안다.
니스. 고마워, 남자 :-) 당신은 '당신의 서비스가 이렇게 보일 필요가 있다면 ...'라고 말합니다. 저는 실제로 이런 종류의 물건에 대해 가장 좋은 각도 요소 유형을 사용하고 있는지 알아 내려고 노력하고 있습니다. 대신 당신이 서비스를 어떻게 구조화 할 것인가를 만질 수 있습니까? 아직도 서비스가 되시겠습니까? –