반응형
Vue를 사용한 클릭 투 편집 텍스트 필드
Vue js에서 작업 중인데 필드를 편집하는 데 문제가 있습니다.편집하기 위해 필드를 클릭하면 편집 가능한 모든 필드가 활성화됩니다.여기 제 코드가 있습니다.
export default {
props: ['profileHeight'],
data() {
return {
User: User,
isEditing: false,
form:{
name:'',
email: '',
},
};
},
mounted() {
},
methods: {
activateInEditMode() {
this.isEditing = true
},
deActivateInEditMode() {
this.isEditing = false
}
}
}
<span>Profile settings</span>
<p>Full name<span v-on:click="activateInEditMode" v-show="!isEditing">{{User.state.auth.name}}</span>
<span v-show="isEditing" >
<input v-model="form.name" type="text" class="form-control" >
</span>
</p>
<p>E-mail<span>{{User.state.auth.email}}</span>
<span v-show="isEditing" >
<input v-model="form.email" type="text" class="form-control" >
</span>
</p>
포커스와 흐림 방법을 사용하여 폼 요소를 표시하거나 숨깁니다!이게 도움이 됐으면 좋겠네요!
new Vue({
el: '#app',
data(){
return {
user : {
name: '',
email: ''
},
editField : ''
}
},
methods : {
focusField(name){
this.editField = name;
},
blurField(){
this.editField = '';
},
showField(name){
return (this.user[name] == '' || this.editField == name)
}
}
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.3.4/vue.min.js"></script>
<div id="app">
<h1>Profile settings</h1>
<label for="user-name">Full name</label>
<div class="field">
<span class="field-value" v-show="!showField('name')" @click="focusField('name')">{{user.name}}</span>
<input v-model="user.name" v-show="showField('name')" id="user-name" type="text" class="field-value form-control" @focus="focusField('name')" @blur="blurField">
</div>
<label for="user-email">Email address</label>
<div class="field">
<span class="field-value" v-show="!showField('email')" @click="focusField('email')">{{user.email}}</span>
<input v-model="user.email" v-show="showField('email')" type="email" class="field-value form-control" @focus="focusField('email')" @blur="blurField">
</div>
</div>
이것을 하는 방법은 수십 가지가 있다.컴포넌트를 추천합니다.
console.clear()
Vue.component("editable",{
props:["label", "value"],
template:`
<p>
{{label}}
<span @click="editing=true" v-show="!editing">
{{value}}
</span>
<span v-show="editing" >
<input :value="value"
@input="$emit('input', $event.target.value)"
@keydown.enter="editing=false"
type="text"
class="form-control" >
</span>
</p>
`,
data(){
return {
editing: false,
}
}
})
const User = {
name: 'bob',
email: 'bob@example.com'
}
new Vue({
el:"#app",
data() {
return {
form: User
};
},
})
<script src="https://unpkg.com/vue@2.2.6/dist/vue.js"></script>
<div id="app">
<span>Profile settings</span>
<editable label="Full name" v-model="form.name"></editable>
<editable label="E-mail" v-model="form.email"></editable>
<br>
{{form}}
</div>
이 컴포넌트를 작성했습니다.이것이라고 부릅니다.Click-to-Edit
.
기능:
- 서포트
v-model
- 다른 곳을 클릭할 때와 누를 때의 변경 내용을 저장합니다.
[편집] 을 누릅니다.vue:
<template>
<div>
<input type="text"
v-if="edit"
:value="valueLocal"
@blur.native="valueLocal = $event.target.value; edit = false; $emit('input', valueLocal);"
@keyup.enter.native="valueLocal = $event.target.value; edit = false; $emit('input', valueLocal);"
v-focus=""
/>
<p v-else="" @click="edit = true;">
{{valueLocal}}
</p>
</div>
</template>
<script>
export default {
props: ['value'],
data () {
return {
edit: false,
valueLocal: this.value
}
},
watch: {
value: function() {
this.valueLocal = this.value;
}
},
directives: {
focus: {
inserted (el) {
el.focus()
}
}
}
}
</script>
언급URL : https://stackoverflow.com/questions/45050119/click-to-edit-text-field-with-vue
반응형
'itsource' 카테고리의 다른 글
PHP가 숫자 문자열에서 쉼표 제거 (0) | 2022.09.17 |
---|---|
mysql에서 해당 달의 첫날을 얻는 방법은 무엇입니까? (0) | 2022.09.17 |
matplotlib 그림에서 축 텍스트 숨기기 (0) | 2022.09.17 |
JavaScript를 사용하여 전체 경로에서 파일 이름을 가져오려면 어떻게 해야 합니까? (0) | 2022.09.17 |
pip을 사용하여 Python MySQLdb 모듈을 설치하는 방법 (0) | 2022.09.17 |