arr.push(JSON.parse(JSON.stringify(obj)))
arr.push({...obj})
- 添加和修改的时候 是浅拷贝 改变表单里面的值 对其他的值都变化,所以是需要深拷贝
<template>
<div>
<span v-text="'姓名:'"></span><input type="text" v-model="obj.name" />
</div>
<div>
<span v-text="'年龄: '"></span><input type="text" v-model="obj.age" />
</div>
<div>
<span v-text="'个人描述: '"></span><input type="text" v-model="obj.dec" />
</div>
<button @click="add()">添加</button>
<hr />
<div>
<input
type="text"
placeholder="请输入信息"
v-model="query"
@input="queryfn"
/>
</div>
<table border="1">
<tr>
<th>姓名:</th>
<th>年龄:</th>
<th>个人描述:</th>
<th>操作:</th>
</tr>
<tr v-for="(v, i) in arr" :key="i">
<td>{{ v.name }}</td>
<td>{{ v.age }}</td>
<td>{{ v.dec }}</td>
<td>
<button @click="del(i)">删除</button>
<button @click="updatas(v, i)">修改</button>
</td>
</tr>
</table>
<fieldset v-if="flag">
<legend>修改用户弹框</legend>
<div>
<span v-text="'姓名:'"></span><input type="text" v-model="updata.name" />
</div>
<div>
<span v-text="'年龄: '"></span><input type="text" v-model="updata.age" />
</div>
<div>
<span v-text="'个人描述: '"></span
><input type="text" v-model="updata.dec" />
<button @click="save">保存</button>
<button @click="close">关闭</button>
</div>
</fieldset>
</template>
<script>
import { reactive, ref } from "vue";
export default {
setup() {
const updata = reactive({
name: "",
age: "",
dec: "",
});
let flag = ref(false);
let index = ref(null);
const updatas = (v, i) => {
flag.value = true;
updata.name = v.name;
updata.age = v.age;
updata.dec = v.dec;
index.value = i;
};
const save = () => {
arr.value.splice(index.value, 1, { ...updata });
};
const close = () => {
flag.value = false;
};
let query = ref("");
const queryfn = () => {
if (query.value.trim() == "") return;
let narr = arr.value.filter((r) => r.name == query.value);
console.log(narr);
arr.value = narr;
};
let arr = ref([
{
name: "张",
age: "3",
dec: "333",
},
{
name: "李四",
age: "3",
dec: "333",
},
{
name: "王五",
age: "3",
dec: "333",
},
]);
const obj = reactive({
name: "",
age: "",
dec: "",
});
const add = () => {
if (
obj.name.trim() == "" ||
obj.age.trim() == "" ||
obj.dec.trim() == ""
) {
console.log("缺少");
return;
}
arr.value.push({
name: obj.name,
age: obj.age,
dec: obj.dec,
});
for (var key in obj) {
obj[key] = "";
}
};
function del(i) {
arr.value.splice(i, 1);
}
return {
arr,
add,
obj,
del,
query,
queryfn,
updatas,
flag,
updata,
save,
close,
};
},
};
</script>
<style>
</style>