【问题标题】:VueJS Stop observer watching a temporary variableVueJS 停止观察者观察一个临时变量
【发布时间】:2018-04-18 17:10:51
【问题描述】:

我遇到了 VueJS 和 Observer 对象的问题。我将我的部分对象分配给一个临时变量以供以后使用。然后用新数据重新分配对象的原始部分,并在 8 秒后将其恢复到我存储在临时变量中的原始状态。

我将此对象链接到一个列表视图,该列表视图以不同的方式呈现这两种不同的状态。

我想阻止观察者观察我的临时变量,但我不知道怎么做。

以下是我目前拥有的代码:

var temporary = core_data.map_data[data.selected]; //This is the variable I dont want to be observed.

core_data.map_data[data.selected].colour = data.colour;
core_data.map_data[data.selected].message = data.message;
core_data.map_data[data.selected].type = "ping";
setTimeout(
    function () {
        core_data.map_data[data.selected] =temporary;

        // console.log(core_data.map_data);
    }, 8000);

【问题讨论】:

  • 你不想看哪个变量?
  • 临时的。我现在要更新我的问题

标签: javascript vue.js vuejs2 observers


【解决方案1】:

如果您不希望 vuejs data(){} 对象中的反应性,您可以使用 JSON 的 parse/stringify 方法进行“克隆”并制作对象的副本。例如:

 var copy = JSON.parse( JSON.stringify( this.original ) );

您现在可以修改copy,它不会更新您的原始数据属性。

完成修改后,您仍然可以更新this.original,就像为它分配复制对象的值一样简单。

jsfiddle - demo

【讨论】:

  • 非常感谢您的帮助。我是 VueJS 的新手,所以我可能做错了很多事情。只是这也使用了一些其他系统,这些系统在页面通过套接字保持打开时动态更改页面。
  • 没问题,我很乐意提供帮助。这个答案解决了你的问题吗?
【解决方案2】:

使用lodash.jsjavascript 库,cloneDeep 方法,因为 JSON.parse(JSON.stringify()) 对于一些大列表或大数据不起作用,并且没有效果

https://lodash.com/docs/#cloneDeep

例子

var objects = [{ 'a': 1 }, { 'b': 2 }];

var deep = _.cloneDeep(objects);
console.log(deep[0] === objects[0]);
// => false

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-07
    • 2019-05-23
    • 2018-12-11
    • 2019-03-09
    • 1970-01-01
    • 1970-01-01
    • 2021-04-13
    相关资源
    最近更新 更多