我在工厂中有一个间隔调用一个获取最新汇率的函数。
每次更新汇率时都会有一些需要更新的计算。
所以我只是每次都在$ 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不打印更新后的值?
答案 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>