这是一项服务:
myApp.factory('myService', function() {
var test = 5;
return{
setTestVal: function(val){
test = val;
},
getTestVal: function(){
return test;
}
}
});
这是我的控制器。一个得到价值,一个设定它
function MyCtrl($scope, myService) {
$scope.test = myService.getTestVal();
}
function SetCtrl($scope, myService){
$scope.newTestVal = '';
$scope.setTestVal = function(val){
myService.setTestVal(val)
}
}
但是当我设置值时,视图不会更新。
小提琴:http://jsfiddle.net/HB7LU/7036/
这是设置和获取值的错误方法吗?
答案 0 :(得分:1)
不,这种方法非常好,但视图不知道何时设置了新值,您必须在共享属性上设置$watch
:
$scope.$watch(function() {
return myService.getTestVal();
}, function(value) {
$scope.test = value;
});
答案 1 :(得分:0)
你甚至可以没有$ watch, 检查我从你的修改过的小提琴:
var myApp = angular.module('myApp',[]);
myApp.factory('myService', function() {
var test = 5;
var obj = {
test : 5
}
return{
setTestVal: function(val){
test = val;
obj.test = val;
},
getTestVal: function(){
return test;
},
data : obj
}
});
function MyCtrl($scope, myService) {
$scope.test = myService.getTestVal();
$scope.data = myService.data;
}
function SetCtrl($scope, myService){
$scope.newTestVal = '';
$scope.setTestVal = function(val){
myService.setTestVal(val)
}
}