반응형
Vue JS의 어레이에서 항목 설명 편집
Vue JS를 사용하여 작업 앱에 편집 기능을 추가하려고 합니다.
- 편집 버튼 클릭 이벤트가 있습니다.
@click="editShow"
모든 항목에 대한 편집 입력을 보여 줍니다.해당 입력만 표시하기 위해 필요합니다. - 그러면 항목 설명에 저장할 편집 값을 가져올 수 없습니다.
@keyup.enter="editTask"
. 어떤 이유로 태스크는 오브젝트가 아닌 키업 이벤트를 참조합니다.그게 문제의 원인인 것 같아요.
다음은 제가 지금까지 가지고 있는 https://jsfiddle.net/clintongreen/0p6bvd4j/ 입니다.
HTML
<div class="container" id="tasks">
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">
{{ message }}
</h3>
</div>
<ul class="list-group">
<li class="list-group-item clearfix" v-for="task in tasklist" >
<strong v-if="!editActive">{{ task.description }}</strong>
<input v-model="editTaskName" v-bind:placeholder="task.description" v-if="editActive" @keyup.enter="editTask" type="text" class="form-control input-height pull-left">
<div class="btn-group btn-group-sm pull-right" role="group" v-if="!task.completed">
<button type="button" class="btn btn-default" @click="completeTask(task)">Complete</button>
<button type="button" @click="editShow" class="btn btn-default">Edit</button>
<button type="button" class="btn btn-default" @click="removeTask(task)">Remove</button>
</div>
<button class="btn btn-default btn-sm completed text-muted pull-right disabled btn-width" v-else>Completed</button>
</li>
<li class="list-group-item clearfix">
<input v-model="newTaskName" @keyup.enter="newTask" type="text" class="form-control input-height pull-left">
<button class="btn btn-success btn-sm pull-right btn-width" @click="newTask">Add Task</button>
</li>
</ul>
</div>
</div>
JS
new Vue({
el: '#tasks',
data: {
message: 'Tasks',
completed: null,
newTaskName: '',
editTaskName: '',
editActive: false,
tasklist: [
{ description: 'Read', completed: true },
{ description: 'Write', completed: true },
{ description: 'Edit', completed: false },
{ description: 'Publish', completed: false }
]
},
methods: {
completeTask: function(task){
task.completed = true;
},
newTask: function(){
this.tasklist.push({description: this.newTaskName, completed: false});
},
removeTask: function(task){
this.tasklist.splice(this.tasklist.indexOf(task), 1);
console.log(task);
},
editShow: function(task){
this.editActive = true // should only show the corresponding edit input
console.log(task);
},
editTask: function(task){
console.log(task);
}
}
})
추가했습니다.editing
작업을 부울 수 있습니다.개별 작업을 편집 모드로 전환하려면 이 옵션을 전환할 수 있습니다.게다가, 나는 당신의 일을 통해 넘깁니다.editTask
에서keyup.enter
마지막으로, 사용 후v-model
설명이 양방향으로 제한되어 있기 때문에 입력할 필요가 없습니다.Enter 키업 핸들러는 모드를 다시 전환하기만 하면 됩니다.
new Vue({
el: '#tasks',
data: {
message: 'Tasks',
completed: null,
newTaskName: '',
tasklist: [
{ description: 'Read', completed: true, editing: false },
{ description: 'Write', completed: true, editing: false },
{ description: 'Edit', completed: false, editing: false },
{ description: 'Publish', completed: false, editing: false }
]
},
methods: {
completeTask: function(task){
task.completed = true;
},
newTask: function(){
this.tasklist.push({description: this.newTaskName, completed: false, editing: false});
},
removeTask: function(task){
this.tasklist.splice(this.tasklist.indexOf(task), 1);
console.log(task);
},
editTask: function(task){
task.editing = false;
console.log(task);
}
}
})
body{
margin-top: 4em;
}
.completed{
text-decoration: line-through;
}
.btn-width{
width: 182px;
}
.input-height{
width: 346px !important;
height: 30px;
}
.container{
width: 600px;
}
strong{
line-height: 2.2;
}
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"/>
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div class="container" id="tasks">
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">
{{ message }}
</h3>
</div>
<ul class="list-group">
<li class="list-group-item clearfix" v-for="task in tasklist" >
<strong v-if="!task.editing">{{ task.description }}</strong>
<input v-model="task.description" v-if="task.editing" @keyup.enter="editTask(task)" type="text" class="form-control input-height pull-left">
<div class="btn-group btn-group-sm pull-right" role="group" v-if="!task.completed">
<button type="button" class="btn btn-default" @click="completeTask(task)">Complete</button>
<button type="button" @click="task.editing = true" class="btn btn-default">Edit</button>
<button type="button" class="btn btn-default" @click="removeTask(task)">Remove</button>
</div>
<button class="btn btn-default btn-sm completed text-muted pull-right disabled btn-width" v-else>Completed</button>
</li>
<li class="list-group-item clearfix">
<input v-model="newTaskName" @keyup.enter="newTask" type="text" class="form-control input-height pull-left">
<button class="btn btn-success btn-sm pull-right btn-width" @click="newTask">Add Task</button>
</li>
</ul>
</div>
</div>
언급URL : https://stackoverflow.com/questions/42848043/edit-item-description-in-array-in-vue-js
반응형
'programing' 카테고리의 다른 글
"static" 기능과 "static inline" 기능의 차이점은 무엇입니까? (0) | 2022.07.31 |
---|---|
auto a=1; C에서 컴파일되는 이유는 무엇입니까? (0) | 2022.07.31 |
Java에서 ByteBuffer의 용도는 무엇입니까? (0) | 2022.07.31 |
Spring Boot + JPA : 열 이름 주석이 무시되었습니다. (0) | 2022.07.31 |
vue-router 3.5.1 경고: 의 태그 프로포트가 사용되지 않으며 Vue Router 4에서 제거되었습니다. (0) | 2022.07.30 |