2017-01-09 45 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

相关问题