【问题标题】:Vue.js add class on specific elementVue.js 在特定元素上添加类
【发布时间】:2018-02-08 15:43:47
【问题描述】:

因此,当单击<li> 时,我创建了一个基本任务列表,我想将它们设置为完成。单击它时,我希望将一个类添加到单击的<li> 中。我无法通过文档弄清楚这一点,所以我希望有人可以帮助我:D

我已有的代码:

        <transition-group name="list">
            <li  class="list-item list-group-item"  v-for="(task, index) in list" :key="task.id" v-on:click="finishTask(task.id)" >
                @{{ task.text }}
                <button @click="removeTask(task.id)" class="btn btn-danger btn-xs pull-right">Delete</button>
            </li>
        </transition-group>



    </ul>

</div>

    // get the csrf token from the meta
var csrf_token = $('meta[name="csrf-token"]').attr('content');

export default {
    data() {
        return {
            list: [],
            taskInput: {
                id: '',
                text: ''
            }
        };
    },

    // So the tasks will show when the page is loaded
    created() {
        this.allTasks();
    },

    methods: {
        // get all the existing tasks
        allTasks() {
            axios.get('tasks').then((response) => {
                this.list = response.data;
            });
        },
        // create a new task
        createTask() {
            axios({
                method: 'post',
                url: '/tasks',
                data: {
                    _token: csrf_token,
                    text: this.taskInput.text,
                },
            }).then(response => {
                this.taskInput.text = '';
                this.allTasks();
            });
        },
        // remove the tasks
        removeTask(id) {
            axios.get('tasks/' + id).then((response) => {
                this.allTasks();
            });
        },
        finishTask(id) {
            axios({
                method: 'post',
                url: 'tasks/done/' + id,
                data: {
                    _token: csrf_token,
                    data: this.taskInput,
                },
            }).then(response => {
                this.allTasks();
            });
        }
    }
}

我知道我应该如何使用 jquery 而不是使用 vue js 来做到这一点,我希望这不是一个愚蠢的问题:D

【问题讨论】:

    标签: laravel vue.js


    【解决方案1】:

    您可以bind css classes and styles,将布尔型done 属性添加到默认值为false 的便笺对象中,当您单击便笺时,将其done 属性更改为true。这是一个例子

    new Vue({
    	el:"#app",
      data:{
      	notes: [ 
        		{ text: "First note", done:false  }, 
            { text: "Second note", done:false  }, 
            { text: "Third note", done:false  }, 
            { text: "Fourth note", done:false  }, 
            { text: "Fifth note", done:false  } 
          ]
      },
      methods:{
      	finishNote(note){
        	// send your api request
          // then update your note
          note.done = true
        }
      }
    })
    .done{
      background-color:green;
    }
    <script src="https://cdn.jsdelivr.net/npm/vue@2.5.13/dist/vue.min.js"></script>
    <div id="app">
      <ul>
        <li v-for="note in notes" :class="{done:note.done}" @click="finishNote(note)">{{note.text}}</li>
      </ul>
    </div>

    【讨论】:

    • 这对我自己来说太愚蠢了,我用 :class 函数尝试了一些东西,但我没有以正确的方式做到这一点。谢谢你的回答!
    【解决方案2】:

    您可以使用 event 参数。这是在您的点击方法中自动提供的。

    onListClicked(event) {
      event.target.className += " myClass";
    }
    

    这里我为你做了一个演示:https://jsfiddle.net/6wpbp70g/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-16
      • 1970-01-01
      • 2015-11-19
      • 1970-01-01
      • 2023-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多