2014-10-20 72 views
0

我在工廠調用了一個函數來獲取最新的匯率。爲什麼工廠中的私有變量沒有得到更新?

每當匯率更新時,都會有一些計算需要更新。

所以我只是要重新計算$ 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

因爲這些值沒有在任何地方更新?代碼修改的唯一方法是'blockchainInfoExchangeRates.IDR'。爲什麼'number1'和'number2'會改變? – 2014-10-20 08:54:49

+0

通過更改控制器中的數據將此工廠注入(綁定到輸入框),number1和number2將不會更新? – magician11 2014-10-20 09:01:08

+0

您沒有顯示您的工廠返回的內容,也沒有顯示數字如何綁定到視圖中的字段。我們無法猜測這些部分。顯示相關的代碼。 – 2014-10-20 09:04:32

回答

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> 
相關問題