当前的问题是this问题
的合理延续嗨,我正在尝试按历史记录步骤自动保留ng-model
个值。因此,当一个人点击浏览器的后退/前进按钮时,他在输入/复选框/等中获得相同的值。在他离开之前就已经存在(包括用户的编辑)。
我正在使用浏览器的会话存储(Web存储)来保留ng-model
值。这种存储在每个标签/每个会话的基础上工作,所以它可以用于这种问题。
通过'ui-router'我能够将每个用户的“导航”与唯一的UUID(GUID)相关联,后者用于获取包含所有持久bucket
值的$scope
。
我甚至可以找到(部分)有效的实现,你可以在这个问题的底部找到。
目前我遇到了在每个范围内存储值的问题。目前我使用ng-model
的密钥作为存储桶的密钥,例如ng-model="city.name"
我使用"city.name"
作为我的存储桶的密钥。在此示例中,进入会话存储的结果桶看起来像
var bucket === {
"city.name": "Some city name"
}
...
$window.sessionStorage.setItem(viewId, bucket);
显然,如果我们在城市列表上进行迭代,我们可能会得到十几种这样的密钥。为了解决此问题,我需要某种id
来唯一标识整个ng-model
结构中的当前$scope
位置。
我不能将$scope.$id
用于此目的,因为每次重新创建范围时它都会更改。因此,我提出的一个想法是使用$scope
的{{1}}属性计算当前$scope
在$ scope树中的相对位置,并将其与相同位置连接起来它的父母和父母的父母,直到我们达到$ rootScope,这是我的看法:
$$prevSibling
对$rootScope.$index = function() {
return this.$$index || (this.$$index = !this.$$prevSibling ? 0 : this.$$prevSibling.$index());
};
$rootScope.$uid = function() {
return this.$$uid || (this.$$uid = (!this.$parent ? '' : this.$parent.$uid()) + ',' + this.$index());
};
的调用将允许获得与此$scope.$uid()
类似的字符串值,该字符串值将唯一标识范围层次结构中当前'0,4,6,2,1,123'
的位置。此值可以连接到$scope
的密钥,并且会产生类似
ng-model
当{
"0,4,6,2,1,1-city.name": "Some city name 1"
"0,4,6,2,1,2-city.name": "Some city name 2"
"0,4,6,2,1,3-city.name": "Some city name 3"
...
"0,4,6,2,1,123-city.name": "Some city name 123"
}
在“导航”生命周期内动态创建/销毁时,提供的实现显然会失败,换句话说$scope
的{{1}}可能会发生变化。我不确定$ scope是否可以预先添加(这将会对索引进行索引并将所有内容分开)但我确信可以销毁和删除作用域,从而导致索引不一致。显然我有一个普遍的问题你怎么看待这个问题,从你的角度来看是否有更好的解决方案
提前谢谢!
我已经对$scope
进行了修饰,以便我们将每个更改存储在会话存储中,更改将在500毫秒延迟后被限制和存储,在这500毫秒内发生的每个更改都会重新启动前一个计时器。
$$prevSibling