使用factoryJS设置并获得价值

时间:2014-10-07 21:05:00

标签: javascript angularjs

这是一项服务:

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/

这是设置和获取值的错误方法吗?

2 个答案:

答案 0 :(得分:1)

不,这种方法非常好,但视图不知道何时设置了新值,您必须在共享属性上设置$watch

$scope.$watch(function() {
    return myService.getTestVal();
}, function(value) {
    $scope.test = value;
});

小提琴:http://jsfiddle.net/HB7LU/7041/

答案 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)
    }
}

http://jsfiddle.net/no9rv2nb/