Angularjs 角度:将变量从一个视图传递到另一个视图
在我的应用程序中,用户在第一个视图中设置他/她的性别,我将其存储在localStorage中Angularjs 角度:将变量从一个视图传递到另一个视图,angularjs,Angularjs,在我的应用程序中,用户在第一个视图中设置他/她的性别,我将其存储在localStorage中 $scope.setGender = function(gender){ $scope.data.gender = gender; localStorage.setItem('paramGender', $scope.data.gender); } 然后,用户转到第二个视图,通过读取localStorage读取代码中的性别: $scope.data.gender = localStor
$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的责任。这种做事方法很容易失控,被误用。一般来说,我只把必须在应用程序范围内知道的东西放在根范围内,例如首选语言环境。