반응형
vuejs의 temp 값이 있는 테이블에서 새 레코드를 추가하는 방법
기록이 있는 테이블이 있습니다.필드를 클릭하면 인라인 편집 옵션이 있습니다.새 행을 추가할 수 있는 옵션이 있습니다.
문제는 새로 추가하기를 2번 클릭했을 때 입력이 있는 테이블에 빈 행이 2개 있고 입력을 시작하면 두 행의 필드 값이 모두 변경된다는 것입니다.
제가 사용하기 때문에.v-model="temp.name"
그리고.isCreateMode
그리고 제 경우에는 이것과 함께 몇 개의 행이 있습니다.temp
모델인데 어떻게 대처해야 할지 모르겠어요.
temp
사용자가 필드 편집을 취소할 수 있기 때문에 필요합니다.생성과 편집에 동일한 입력 필드를 사용합니다.
//in component
// other code here
computed: {
...mapState([
'editModeField',
'editedUser',
'editMode',
'createMode',
'temp',
'users'
]),
...mapGetters([
'filteredUsers'
]),
isEditable (field, user, index) {
if (this.isCreateMode(user)) {
return this.users[index] === user
}
return this.editedUser === user && this.editModeField ===
field
},
isEditMode (field, user) {
return this.editMode && this.editedUser === user &&
this.editModeField === field
},
isCreateMode (user) {
return this.createMode && !user.id
},
addUser (user, index) {
if (!user) {
user = {
name: '',
car: ''
}
this.toggleCreateMode(true)
this.createUser(user)
return
}
// this makes a request to the endpoint
this.storeUser(user, index)
},
//actions.js
createUser ({ state, commit }, user) {
commit('CREATE_USER', user)
commit('SET_TEMP_OBJECT', { name: '', car: null })
},
//mutations
CREATE_USER (state, user) {
state.users.push(user)
},
SET_TEMP_OBJECT (state, user) {
state.temp = user
},
<table>
<tr v-for="user, index in filteredUsers">
<td>{{ index + 1 }}</td>
<td>
<input
v-if="isEditable('name', user, index)"
v-model="temp.name"
v-focus="!isCreateMode(user)" />
<div v-if="isEditMode('name', user)"
@click="updateField('name', user)"></div>
<span v-if="isEditMode('name', user)"
@click="cancelUpdate('name', user)"></span>
<span
v-if="isShowMode('name', user)"
@click="editField('name', user)">{{ user.name }}</span>
</td>
<td>
<a href="javascript:void(0)"
@click="addUser()">
Add user</a>
</td>
// other columns
</table>
사용자가 기존 입력을 제출하지 않는 한 새 입력을 추가하지 못하도록 하는 것은 어떨까요?
당신이 그 코드를 제공하지 않았기 때문에 당신의 코드가 어떻게 작동하는지 알 수 없습니다.temp
/ 스토어 데이터의 상태, 그러나 제안된 해결책은 다음과 같습니다.
new Vue({
el: "#app",
data: {
users: ['foo', 'bar'],
input: '',
counter: 0
},
methods: {
addUser(user) {
if (this.counter == 0) {
this.counter++
} else if (this.counter == 1 && user) {
this.counter--
this.input = ''
this.users.push(user)
} else {
alert('please fill the exisiting input')
}
}
}
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div id="app">
<input v-for="n in counter" type="text" v-model="input">
<button @click="addUser(input)">addUser</button>
<ul>
<li v-for="user in users">{{user}}</li>
</ul>
</div>
언급URL : https://stackoverflow.com/questions/57475500/how-to-add-new-records-in-a-table-with-temp-values-in-vuejs
반응형
'IT' 카테고리의 다른 글
콘솔 및 파일 첨부 파일을 사용한 매우 간단한 log4j2 XML 구성 파일 (0) | 2023.09.25 |
---|---|
관계형 데이터베이스의 사용자 정의 필드 설계 패턴 (0) | 2023.09.25 |
MariaDB Amazon-rds 인스턴스 RMySQL 및 OBDC(윈도우)에 액세스할 수 없음 (0) | 2023.09.25 |
Yoast 변수를 사용하여 페이지 내에서 Yoast 제목을 가져올 수 있는 방법이 있습니까? (즉, %%title%%) (0) | 2023.09.25 |
스타일을 한 번에 여러 개의 수업에 적용하려면 어떻게 해야 합니까? (0) | 2023.09.25 |