2017-01-09 44 views
0

在我的應用程序的用戶將他/她的性別在第一觀看,我把它存儲在localStorage的。角度:通過從視圖變量到另一個

$scope.setGender = function(gender){ 
    $scope.data.gender = gender; 
    localStorage.setItem('paramGender', $scope.data.gender); 
} 

然後,用戶進入到第二個視圖,並通過讀取localStorage的讀取其代碼中的性別:

$scope.data.gender = localStorage.getItem("paramGender")); 

但是,如果用戶可以追溯到第一種觀點,改變他/她的性別並返回到第二個視圖,$scope.data.gender未在第二個控制器中更新。

如何在不重新載入整個第二個視圖(我需要保留緩存,因爲第二個視圖很重)的情況下實現該目標?

謝謝

+0

爲什麼不更新本地存儲,以反映性別的改變?您可以在那裏更新單個項目。 –

+0

是的,這就是我所做的,我在運行'scope.setGender'之後運行第一個視圖,但是第二個視圖的控制器js沒有被重新執行,因爲它在緩存中。 – Louis

+0

什麼是緩存中的控制器? – digit

回答

0

我會簡單地在這種情況下使用事件和服務。

app.factory('GenderService', [function() { 
    var self = this; 
    self.gender = null; 

     return { 
     setGender: function(gender) { 
      self.gender = gender; 
     }, 
     getGender: function(){ 
      return self.gender; 
     } 
    } 
}]); 

$scope.setGender = function(gender){ 
    $scope.data.gender = gender; 
    GenderService.setGender(gender); 
    $rootScope.$broadcast('genderUpdated', gender); 
} 

然後在另一個控制器:

$scope.data.gender = GenderService.getGender(); 
    $scope.$on('genderUpdated', function(event, data){ 
     $scope.data.gender = data; 
    }) 

問候,

+0

謝謝,但它似乎沒有它會「第一次」(當第二個視圖尚未加載時),是嗎? – Louis

+0

@路易斯你是對的。我更新了我的答案 –

+0

好的非常感謝,是不是隻是簡單地把變量放在rootcope上? – Louis

相關問題