在viewmodel和$ sessionStorage之间奇怪地同步数据

时间:2017-01-25 09:11:27

标签: angularjs watch session-storage

我正在fgl.res中存储对象列表。然后在我的一个控制器中,我获得该列表的值并将其显示在页面上,用户可以删除其项目。

问题是,当用户从视图模型中删除该列表中的一个项目时,它也会从我不想要的$sessionStorage中删除。

这是我的控制器代码

$sessionStorage

2 个答案:

答案 0 :(得分:1)

制作web_urls的副本以断开绑定(如果有的话)

// Delete a URL from the vm
    vm.deleteUrl = function(index) {
        vm.web_urls = angular.copy(vm.web_urls).splice(index, 1);
    }

您也可以复制newVal以便断开绑定

vm.web_urls = angular.copy(newVal.web_information.web_urls);

答案 1 :(得分:1)

vm.web_urls = newVal.web_information.web_urls;

此行直接引用具有相同内存位置的sessionStorage变量的对象。

因此,即使你从vm.web_urls中删除对象,sessionStorage中的数据也会被删除。

而是使用

复制对象而不是引用
vm.web_urls = angular.copy(newVal.web_information.web_urls);
vm.filters = angular.copy(newVal.web_information.stop_list);

因此,请将watch功能更改为

$scope.$watch(function () {
        return $sessionStorage.currentCommuneData;
    }, function (newVal, oldVal) {
        if (newVal) {
            vm.web_urls = angular.copy(newVal.web_information.web_urls);
            vm.filters = angular.copy(newVal.web_information.stop_list);
        }
        else {
            window.location.replace("test.html");
        }
    }, true);