为什么工厂中的私有变量没有更新?

时间:2014-10-20 08:44:15

标签: angularjs

我在工厂中有一个间隔调用一个获取最新汇率的函数。

每次更新汇率时都会有一些需要更新的计算。

所以我只是每次都在$ http.get.success中重新计算这些值。

然而,局部变量似乎没有得到更新。我创建了一个简单的jsfiddle来向您展示我的意思:http://jsfiddle.net/magician11/37msdsry/2/

app.factory('testFactory', function(){
var number1 = 0, number2 = 0;

var getLatestExchangeRates = function() {

    $http.get('https://api.bitcoinaverage.com/ticker/global/IDR/')
    .success(function(response) {
        blockchainInfoExchangeRates.IDR = response.last;
    });

    printValues();
};

var printValues = function() {

    console.log('number1: ' + number1);             
    console.log('number2: ' + number2);
};

$interval(getLatestExchangeRates, 60000);
getLatestExchangeRates();

为什么number1不打印更新后的值?

1 个答案:

答案 0 :(得分:1)

从工厂方法返回后,number1属性在工厂返回时保存一个值。

这就是为什么number1永远不会更新。

要访问私有变量,您需要返回一个函数,该函数将捕获对原始私有变量的引用,就像它已经与printValues函数一起使用一样:

return {
    getValues : function() { return {number1 : number1, number2: number2 }; }
    printValues: printValues
};

现在就可以使用它了:

console.log($scope.testFactory.getValues().number1);

$scope.currentNumbers = $scope.testFactory.getValues();
...
<p>{{currentNumbers.number1}}</p>