Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/456.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何初始化数据但不改变原始数据_Javascript_Php_Laravel_Vue.js_Vuejs2 - Fatal编程技术网

Javascript 如何初始化数据但不改变原始数据

Javascript 如何初始化数据但不改变原始数据,javascript,php,laravel,vue.js,vuejs2,Javascript,Php,Laravel,Vue.js,Vuejs2,需要从其他对象“原始设置”初始化Vue数据“设置”,但不需要在数据“设置”更改时更改此对象。如何做到这一点 new Vue({ el: "#app", data: { settings: original_settings } }); 您可以使用JSON.parse(JSON.stringify(obj))来创建对象的deep克隆副本 new Vue({ el: "#app", data: { settings: J

需要从其他对象“原始设置”初始化Vue数据“设置”,但不需要在数据“设置”更改时更改此对象。如何做到这一点

new Vue({
    el: "#app",
    data: {
        settings: original_settings        
    }
});

您可以使用
JSON.parse(JSON.stringify(obj))
来创建对象的
deep
克隆副本

new Vue({
   el: "#app",
   data: {
     settings: JSON.parse(JSON.stringify(original_settings))        
   }
});
另一种解决方案是使用
对象。从
ES6
分配

new Vue({
   el: "#app",
   data: {
     settings: Object.assign({}, original_settings)        
   }
});

我认为这不是一个好的解决办法。 请参阅有关数据的文档:

文件:

不建议观察具有自身有状态行为的对象。 一旦观察到,就不能再向根数据对象添加被动属性

如果需要从外部对象绑定数据,可以使用计算属性访问它们,也可以使用存储(VueX)

您可以这样做:

var original_settings = { foo: 'var'}

new Vue({
  el: '#el',
  data: {
    //empty
  },
  computed: {
    foo: {
      get: function () {
        return original_settings.foo
      },
      set: function (value) {
        original_setting.foo = value
      }
    }
  }
})

小心使用Object.assign和嵌套对象。它对您有效吗?是的,全部有效。所以没有让我马上接受答案。