cari

Rumah  >  Soal Jawab  >  teks badan

Menunjukkan semua elemen dalam Vue.js menggunakan gelung, saya ingin menyembunyikan salah satu elemen tetapi semua elemen tersembunyi

Gambar pertama, tak perlu klik "Edit"

Gambar kedua apabila mengklik "Edit"

Di sini, apabila saya mengklik butang edit yang mana, semua tugasan dalam gelung ditambah bahagian yang terdapat di dalamnya akan disembunyikan, jika tidak bahagian itu akan ditunjukkan, tetapi saya ingin menyembunyikan tugas tertentu apabila saya mengklik butang edit. Bolehkah sesiapa membantu saya?

<script>
export default {
    data(){
        return{
            newTaskTitle: "",
            isEditing : false
        }
    },
    props:{
        Task:{
            type:Array,
            required: true
        },
    },
    methods:{
        removeTask: function(idx){
            this.Index = idx;
            this.$emit('remove',this.Index);
        },
        EditTaskI(tsk){
            this.task = tsk;
            console.log(this.task);
            this.isEditing = this.isEditing == true ? false : true;
            this.newTaskTitle = this.task;
        },
        TaskUpdated(indx){
            this.Index = indx
            this.$emit('update',this.Index,this.newTaskTitle);
            this.isEditing = this.isEditing == true ? false : true;
        },
        taskContentChange(e){
            this.newTaskTitle = e.target.value;
        }
    }
}
</script>
<template>
    <section v-if="Task.length > 0" class="taskMainSection">
        <section v-for="(tasks,index) in Task" :key="index" class="sectionTask" >
            <section class="TaskBox" v-if="!isEditing">
                <div class="TaskTitleList" >
                    <div class="TaskSection">
                            <p class="listTask">{{ tasks.Task }}</p>
                    </div>
                </div>
                <div class="OptionSectionMain">
                    <div class="OptionSection">
                            <p class="removeTask fa fa-close" @click="removeTask(index)"></p>
                            <p class="editTask fa fa-edit" @click="EditTaskI(tasks.Task,index)"></p>
                    </div>
                </div>
            </section>
            <section class="TaskBoxEdit" v-else>
                <div class="TaskTitleList" >
                    <div class="TaskSection">
                        <input type="text" class="form-control" :value="newTaskTitle" @change="taskContentChange">
                    </div>
                </div>
                <div class="OptionSectionMain">
                    <div class="OptionSection">
                            <p class="removeTask fa fa-check" @click="TaskUpdated(index)"></p>
                    </div>
                </div>
            </section>
        </section>
    </section>
</template>

P粉613735289P粉613735289277 hari yang lalu418

membalas semua(2)saya akan balas

  • P粉814160988

    P粉8141609882024-02-27 12:07:27

    Pemerhatian: isEditing 是代码中的罪魁祸首。因为 isEditing 是一个包含 boolean Pembolehubah global untuk nilai. Jadi apabila mengedit, anda mengemas kini nilai isEditing, yang mempengaruhi semua tugas.

    Penyelesaian: Anda boleh menambah isEditing dalam setiap objek tatasusunan Tugas dan bukannya mentakrifkan isEditing secara global. Dengan cara ini anda hanya boleh mengemas kini nilai tugas yang diklik dan bukannya mengemas kini untuk setiap tugas.

    Kod templat anda ialah :

    bukannya

    balas
    0
  • P粉850680329

    P粉8506803292024-02-27 11:46:25

    Gunakan indeks dan bukannya boolean untuk melakukan isEditing:

    Vue.component('child', {
      template: `
        

    {{ tasks.Task }}

    `, data(){ return{ newTaskTitle: "", isEditing : null } }, props:{ Task:{ type:Array, required: true }, }, methods:{ removeTask(idx){ console.log(idx) this.$emit('remove', idx); }, EditTaskI(tsk, i){ this.task = tsk; this.isEditing = i; this.newTaskTitle = this.task; }, TaskUpdated(indx){ this.Index = indx this.$emit('update',this.Index,this.newTaskTitle); this.isEditing = null; }, taskContentChange(e){ this.newTaskTitle = e.target.value; } } }) new Vue({ el: "#demo", data(){ return{ tasks: [{Task: 'aaa'}, {Task: 'bbb'}, {Task: 'ccc'}], } }, methods: { updateTasks(i, name) { this.tasks[i].Task = name }, removeTask(i) { this.tasks.splice(i, 1) } } })
    
    sssccc
    

    balas
    0
  • Batalbalas