javascript - 是否可以在现场克隆 Vuejs 属性?
问题描述
我有一个 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>
推荐阅读
- r - 为什么 ImputeTS 在 na.kalman 这个数据集上挂起/花费了这么长时间?
- polygon - lapply 使用 gdal_polygonizeR 将栅格转换为多边形
- html - 电子邮件客户端的浮动替代方案
- javascript - 如何在javascript函数中使用输入框中的值
- ios - 使用 HTML5 播放 SWF 或可能的转换
- javascript - ReferenceError 状态未在 vuex 存储中定义
- ruby-on-rails - 未定义的方法“handle_asynchronously”
- python - NUKE表达式引用顶级Camera
- javascript - 无限函数调用,例如 'string'.replace().replace()
- sql-server - 获取具有重叠值的不同 id 组