基於vue雙向繫結實現的動態列表+動態樣式(代碼)

來源:互聯網
上載者:User
本篇文章給大家帶來的內容是關於基於vue雙向繫結實現的動態列表+動態樣式(代碼),有一定的參考價值,有需要的朋友可以參考一下,希望對你有所協助。

先上

註:下面的幾個值可以從其他地方擷取,這邊示範我是寫死的

在上邏輯圖

接著上代碼
template部分

<template>    <div >        <div>            <span>選擇的選項:</span>            <span v-for="item in selectlistlabel" style="margin-left: 10px;">{{item}}</span>        </div>        //choose事件綁定寫在最外層應用的js的事件委託,如果有不知道的可以參考我的一篇關於事件委託的文章        <div @click="choose" v-for="item in list">            <div  v-bind:class="[selectlistvalue.indexOf(item.value)>-1?activeclass:'']" :label="item.label" :value="item.value" style="margin: 5px auto;width: 100px;height: 38px;border:1px solid #e9eaec;line-height: 38px;border-radius: 5px;">                {{item.label}}            </div>        </div>            </div></template>

script部分

<script>export default {        name: 'HelloWorld',        data() {            return {                selectlistlabel:[],            //用來展示是選項                selectlistvalue:[],            //展示選項的值                list: [                      //實際當中這部分資料為後台擷取,現在為了方便寫幾個示範用                    {value: 'New York',label: 'New York'},                    {value: 'London',label: 'London'},                    {value: 'Sydney',label: 'Sydney'},                    {value: 'Ottawa',label: 'Ottawa'},                    {value: 'Paris',label: 'Paris'},                    {value: 'Canberra',label: 'Canberra'}                ],            }        },        computed:{            activeclass: function() {                return 'active'            },        },        methods:{                choose:function(e){                    let dom = e.target;                    //擷取綁定在dom上的資料                    var domvalue = dom.getAttribute("value");                    var domlabel = dom.getAttribute("label");                    //如果點到空白地方                    if(dom.getAttribute("label") == null){                        return;                    }                    //如果點擊的對象的值已經在數組裡面了,則把他從數組中刪除                    //否則就把他添加到數組裡面去                    if(dom.getAttribute("class") == "active"){                        for(let i = 0;i<this.selectlistvalue.length;i++){                            if(this.selectlistvalue[i] == domvalue){                                this.selectlistvalue.splice(i,1)                            }                        }                        for(let i = 0;i<this.selectlistlabel.length;i++){                            if(this.selectlistlabel[i] == domlabel){                                this.selectlistlabel.splice(i,1)                            }                        }                    }else{                        this.selectlistvalue.push(domvalue)                        this.selectlistlabel.push(domlabel)                    }                },      }     }</script>

style部分

<style scoped>   .active{        background-color: #0ccfbf;        color: white;    }</style>

註:詳細說明標註代碼上了,
需要注意的坑:

1.activeclass需要在computed裡面把他return出來,否則載入不到樣式。2.對數組的操作方法,簡單點使用vue支援的變異方法(否則vue無法檢測到數組變化,也就無法動態綁定)官網截了一小段圖


相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.