Javascript 在AngularjS中更改路线时保持状态
我使用的是AngularJS 1.0,需要在页面上维护状态(用户输入的数据),即使用户导航(角度路由)到另一个页面,然后返回到原始页面。下面是它的外观: 从我在网上读到的内容来看,解决方案是使用服务/工厂来存储数据。下面是我的一个实现片段(请注意注释;它们解决了我的问题): 这是一家存储州信息的工厂:Javascript 在AngularjS中更改路线时保持状态,javascript,angularjs,Javascript,Angularjs,我使用的是AngularJS 1.0,需要在页面上维护状态(用户输入的数据),即使用户导航(角度路由)到另一个页面,然后返回到原始页面。下面是它的外观: 从我在网上读到的内容来看,解决方案是使用服务/工厂来存储数据。下面是我的一个实现片段(请注意注释;它们解决了我的问题): 这是一家存储州信息的工厂: app.factory('cassetteRepository', ['$http', '$rootScope', function ($http, $rootScope) { var
app.factory('cassetteRepository', ['$http', '$rootScope', function ($http, $rootScope) {
var state = {
userEnteredSubId: '',
cassettes: [],
numberOfCassettesToShow: 10,
subId1: '',
subId2: '',
subId3: ''
}
return state;
}]);
我的问题是:真的吗?似乎必须有一个更优雅的方法。我只展示了控制器的一部分。每次设置变量时,我都必须记住在保持状态的工厂中设置它的对应项。我错过什么了吗?有更好的方法吗 如果您仅使用它来保存值,那么我将使用值而不是创建服务。以下是如何设置角度值:
angular.module('yourAppName')
.value('cassetteRepository', { data: {} });
现在,您可以注入该值并直接使用其数据属性,这样就不必更新两次。以下是如何在控制器中使用它:
angular.module('yourAppName')
.controller('yourControllerName', ['$scope', 'cassetteRepository', function($scope, cassetteRepository) {
// create a local scope reference if you need to use this in your view
$scope.cassetteRepository = cassetteRepository;
// now when you set properties on $scope.cassetteRepository.data they are set on
// the value and are persisted and shared across your app.
// you can also use ng-model to two-way bind in your view.
$scope.onClickCassette = function (cassette) {
$scope.cassetteRepository.data.subId1 = cassette._content[0].SolarPanel.SubId;
$scope.cassetteRepository.data.subId2 = cassette._content[1].SolarPanel.SubId;
$scope.cassetteRepository.data.subId3 = cassette._content[2].SolarPanel.SubId;
};
});
您不必在值中使用数据
对象。您也可以直接定义属性。例如:
.value('cassetteRepository', { userEnteredSubId = "", cassettes = [], numberOfCassettesToShow = 10, etc. })
这样,您就可以提供默认值并消除
.data
部分。ooooh,我喜欢这样。因此,我的视图将引用$scope上repository属性中的属性,对吗?让我来试一试……没错。视图没有直接访问该值的权限,这就是为什么必须将其放入$scope
属性中的原因。实际上,通过将我现有的CastedRepository设置为scope上的属性,同样的概念也起到了作用。谢谢哦,我完全不知道你已经设置好了并返回状态。哦!我的错,这是我需要的概念。这将在这个网站的整个生命周期中为我节省大量繁琐的工作。谢谢你!
.value('cassetteRepository', { userEnteredSubId = "", cassettes = [], numberOfCassettesToShow = 10, etc. })