自动持久化ng模型值

时间:2014-11-16 23:46:39

标签: javascript angularjs angularjs-scope

当前的问题是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

0 个答案:

没有答案