javascript - 是否可以克隆 Vuejs 属性?

标签 javascript vue.js

我有一个 Vuejs 组件,它可以编辑其值对象的各种属性,并在情况发生变化时使用新对象发出输入事件。我不想修改值对象本身,因此我将属性复制到数据中,并且在值监视中具有基本相同的代码,以便在值更改时更新它们。

如果可以在设置时克隆该值,那就简单多了。有什么办法可以做到这一点吗?我知道我可以在“调用”组件中执行此操作,但它不应该这样做。

示例:

<template>
  <div>
    <v-checkbox label="Indoor" v-model="value.indoor" @change="onChange"/>
    <v-checkbox label="Outdoor" v-model="value.outdoor" @change="onChange"/>
  </div>
</template>

<script>
  export default {
    name: 'OptionsInput',

    props: {
      value: Object, // has indoor, outdoor properties
    },

    methods: {
      onChange() { this.$emit('input', this.value) }
    }
  }
</script>

我不想直接修改值。

最佳答案

通过计算属性制作副本是有效的。如果该值发生变化,则会创建一个新副本。比将所有内容复制到数据中并必须观察更改的值要容易得多。

<template>
    <div>
        <label><input type="checkbox" v-model="copy.indoor" @change="onChange"/> Indoor</label>
        <label><input type="checkbox" v-model="copy.outdoor" @change="onChange"/> Outdoor</label>
    </div>
</template>

<script>
    export default {
        name: 'OptionsInput',

        props: {
            value: Object, // has indoor, outdoor properties
        },

        computed: {
            copy() { return  {...this.value} }
        },

        methods: {
            onChange() { this.$emit('input', this.copy) }
        }
    }
</script>

关于javascript - 是否可以克隆 Vuejs 属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59414657/

相关文章:

vue.js - Vue-cli3 vue-cli-service build --modern 不起作用

vue.js - 删除 Vue js 路由 url 标签

javascript - redux 删除操作中的切片与过滤器

javascript - 根据在此子类别中选择的选项动态更改子类别选择选项

javascript - 在 IE11 和 Edge 中单击时向 DOM 元素添加类时出现问题

javascript - 当用户在输入栏中键入内容时过滤表格

vue.js - Webpack Babel - 模块构建失败 : TypeError: Cannot read property 'bindings' of nul

javascript - VueJS 组件不渲染

javascript - 仅包含电子邮件的过滤器数组

javascript - 如何使用 mustache 符号评估下划线中的 javascript 函数?