vue之双击实现可编辑组件
editText/EditText.vue
<template>
<div>
<div v-if="isEdit">
<input type="text" v-model="newVal" />
<button @click="save">保存</button>
<button @click="cancel">取消</button>
</div>
<div v-else @dblclick="edit">{{ newVal }}</div>
</div>
</template>
<script>
export default {
name: "EditText",
props: ["val"],
data() {
return {
nameEditText: "nameEditText",
newVal: this.val,
backUp: null,
isEdit: false
};
},
methods: {
cancel() {
this.newVal = this.backUp;
this.isEdit = false;
},
edit() {
this.$parent.$children
.filter(item => item.nameEditText == "nameEditText")
.forEach(items => {
items.isEdit = false;
});
this.isEdit = true;
this.backUp = this.newVal;
},
save() {
this.isEdit = false;
}
},
components: {}
};
</script>
<style lang="scss" scoped></style>
editText/index.js
import EditText from "./EditText.vue";
EditText.install = function (vue) {
vue.component(EditText.name, EditText);
};
export default EditText;
main.js
import EditText from "@/components/commom/editText/index";
Vue.use(EditText);
使用组件
<template>
<div>
<EditText :val="editObj.nickName"></EditText>
<EditText :val="editObj.age"></EditText>
<EditText :val="editObj.gneder"></EditText>
</div>
</template>
<script>
export default {
name: "Dres",
data() {
return {
editObj: {
nickName: "XZL",
age: 22,
gneder: "男"
}
};
},
methods: {},
};
</script>
<style lang="scss" scoped></style>