Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 角度:将变量从一个视图传递到另一个视图_Angularjs - Fatal编程技术网

Angularjs 角度:将变量从一个视图传递到另一个视图

Angularjs 角度:将变量从一个视图传递到另一个视图,angularjs,Angularjs,在我的应用程序中,用户在第一个视图中设置他/她的性别,我将其存储在localStorage中 $scope.setGender = function(gender){ $scope.data.gender = gender; localStorage.setItem('paramGender', $scope.data.gender); } 然后,用户转到第二个视图,通过读取localStorage读取代码中的性别: $scope.data.gender = localStor

在我的应用程序中,用户在第一个视图中设置他/她的性别,我将其存储在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
不会在第二个控制器中更新

如何在不重新加载整个第二个视图的情况下实现这一点(我需要保留缓存,因为第二个视图很重)


谢谢

在这种情况下,我只想使用事件和服务

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;
    })

关于,

为什么不更新本地存储以反映性别变化?您可以在那里更新单个项目。是的,这就是我要做的,我在离开第一个视图后运行
$scope.setGender
,但是第二个视图的控制器js没有被重新执行,因为它在缓存中。你说缓存中的控制器是什么意思?我的意思是,除非视图的缓存设置为false,否则第二个视图的控制器不会被重新执行:谢谢,但它似乎在“第一次”(当第二个视图还没有加载时)不会工作,会吗?好的,非常感谢,这不足以简单地把变量放在根作用域上吗?是的,但我非常不喜欢把变量放在它们不属于的作用域上。了解性别不是RootScope的责任。这种做事方法很容易失控,被误用。一般来说,我只把必须在应用程序范围内知道的东西放在根范围内,例如首选语言环境。