Vue列表數組檢測及列表過濾


當我們在data中寫入數據 datalist:[“11111”,“2222”,“333”],的時候,我們用調試工具給索引值0也就是dtalist["0"]這個索引修改值的時候

我們的Vue是接受不到的(那么為什么 數組的pop  shift  或者 push 可以呢?因為作者把這些方法都重新的重寫了一遍),那我們需要怎么操作呢?

    <script src="vue-2.4.0.js"></script>
    <script>
        var vm=new Vue({
            el:'.box',
            data:{
                dataList:[11111,22222,3333],
                dataobj:{
                    name:"杜偉",
                    age:33,
                    sex:'男'
                }
            }
        })
    </script>

  我們需要用到  Vue.set(vm.datalist,0,"中國"); 這樣的話 就可以更改數組的0的值為中國

 

2.我們在設置樣式的時候是通過對象的方式設置的(這里會有點問題),那么我們也可以使用Vue.set()方法來設置

代碼如下

 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>


    <style>
        .red{
            background-color: red;
        }
        .green{
            color: green;
        }
        .f{
            font-size: 32px;;
        }
    </style>


    
    <div :class="styleobj"  id="box">
       <ul>
           <li  v-for="(item,a) of dataList">{{item}}-----------{{a}}</li>
       </ul>
    </div>



    <script src="vue-2.4.0.js"></script>
    <script>
        var vm=new Vue({
            el:'#box',
            data:{
                dataList:[11111,22222,3333],
                dataobj:{
                    name:"杜偉",
                    age:33,
                    sex:''
                },
                styleobj:{
                    red:true,
                    green:true,
                   
                }
            }
        })
    </script>
</body>
</html>

首先呢?我們在data中的styleobj 沒有f的屬性,當我們在控制台測試的使用 vm.styleobj.f=true  頁面沒有任何變化

使用Vue.set(vm.styleobj,"f",true);  頁面有了變化了。

 

列表過濾 代碼如下

    <div class="box">
        <input type="text" v-model="mytext"  @input="inputchanage()" >
        <ul>
            <li v-for="item in dataList" :key="item.id">{{item}}</li>
        </ul>
    </div>

    <script src="vue-2.4.0.js"></script>
    <script>
        var vm=new Vue({
            el:'.box',
            data:{
                mytext:"",
                dataList:["aaaa","asdc","ddf","ffg","ccc","ssdf","wss"],
                list:["aaaa","asdc","ddf","ffg","ccc","ssdf","wss"]
            },
            methods: {
                inputchanage() {
                    // filter過濾  =0為true  小於0為false
                   var newData=this.list.filter(item=>item.indexOf(this.mytext)>-1);
                   this.dataList=newData;
                },
            },
        })
    </script>

  說明:@input 事件為當值改變的時候,就會觸發(changage()事件是獲取焦點改變的時候觸發)

  為什么定義兩個數組datalist和list 一樣的數組? 分析:

  首先如果沒有定義list數組,通過filter函數過濾出的數組會返回一個新的數組,當我們把這個newlist賦值給datalist數組后,輸入框中輸入a 會找到 ["aaaa","asdc"],這樣的話datalist

數組就變了,刪除a的時候 顯示的還是aaaa asdc,因為datalist的值已經改變

  定義兩個數組,我們把datalist數組的值不動,過濾的list數組,當我們在輸入框中輸入a ,newlist =["aaaa","asdc"] 賦值給datalist,當刪除a的時候,list過濾后為

list["aaaa","asdc","ddf","ffg","ccc","ssdf","wss"] 賦值給datalist(filter函數 item為回調函數的參數,當item為aaaa 刪除a后 輸入框為"" 用aaaa
字符串查找indexOf 空字符串 >-1嗎? 返回0 大於-1 所以所有數組的值都返回並賦值給dataList)就可以顯示了

測試 "aaaa".indexOf(""); 輸出這句話 返回0
    
"aaaa".indexOf("");   輸出0
"aaaa".indexOf("f");  輸出-1   所以 當在字符串中查找的時候 如果是空字符串是返回0的

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM