表單、條件、循環指令,分隔符,前端數據庫,過濾器,計算屬性,監聽屬性,冒泡排序


一、 表單指令

1. v-model = "變量"

  • v-model可以實現數據的雙向綁定(即其變量所在的任何位置,只要變量的值改變,所有該變量的值都同時修改更新)

(1)普通input框

  • 變量值就是value的值

(2)單選input框

  • 變量值為多個單選框中,某一個value值

(3)單一復選input框

  • 變量值為布爾,代表是否選中

(4)多復選input框

  • 變量為數組,存放選中的選項的value

2. 實例

<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <title>表單指令</title>
</head>
<body>
<div id="app">
    <!--表單指令:  v-model="變量"   變量值與表單標簽的value相關
        v-model可以實現數據的雙向綁定:v-model綁定的變量值可以影響表單標簽的值,反過來單標簽的值也可以影響變量的值
    -->
    <form action="">
        <!--重點-->
        <input type="text" name="usr" id="usr" placeholder="請輸入賬號" v-model="v1">
        <input type="text" v-model="v1">
        {{ v1 }}

        <hr>

        <!--1.單選框-->
        男:<input type="radio" name="sex" value="male" v-model="v2">
        女:<input type="radio" name="sex" value="female" v-model="v2">
        {{ v2 }}

        <hr>
        
        <!--2.單一復選框-->
        賣身契:同意 <input type="checkbox" name="agree" v-model="v3">
        {{ v3 }}

        <hr>

        <!--3.多復選框-->
        愛好:<br>
        男:<input type="checkbox" name="hobbies" value="male" v-model="v4">
        女:<input type="checkbox" name="hobbies" value="female" v-model="v4">
        哇塞:<input type="checkbox" name="hobbies" value="other" v-model="v4">
        {{ v4 }}
        <hr>

        <button type="submit">提交</button>
    </form>
</div>
</body>
<script src="js/vue.js"></script>
<script>
    new Vue({
        el: '#app',
        data: {
            v1: '123',
            v2: 'male',
            v3: false,
            v4: ['male', 'female']
        }
    })
</script>
</html>

二、條件指令

1. v-show="布爾變量"

  • 當布爾變量的值為true時,顯示並渲染本標簽
  • 當布爾變量的值為false時,在瀏覽器上展示本標簽,但隱藏渲染標簽。(即標簽含有 display:none 樣式)

2. v-if="布爾變量"

  • 當布爾變量的值為true時,顯示並渲染本標簽

  • 當布爾變量的值為false時,在瀏覽器上的html代碼中沒有本標簽。

3. v-if v-else-if v-else

  • v-if="布爾變量"的用法一致

4. 實例

<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <title></title>
    <style>
        [v-cloak] { display: none; }

        .box {
            width: 200px;
            height: 200px;
        }
        .r {background-color: red}
        .b {background-color: blue}
        .g {background-color: green}

        .active {
            background-color: deeppink;
        }
    </style>

</head>
<body>
    <div id="app" v-cloak>
        <!--條件指令:
            v-show="布爾變量"   隱藏時,采用display:none進行渲染
            v-if="布爾變量"     隱藏時,不再頁面中渲染(保證不渲染的數據泄露)
            -----------------------------
            v-if | v-else-if | v-else
        -->
        <div class="box r" v-show="is_show"></div>
        <div class="box b" v-if="is_show"></div>
        <hr>

        <div class="wrap">
            <div>
                <button @click="page='r_page'" :class="{active: page === 'r_page'}">紅</button>
                <button @click="page='b_page'" :class="{active: page === 'b_page'}">藍</button>
                <button @click="page='g_page'" :class="{active: page === 'g_page'}">綠</button>
            </div>
            <div class="box r" v-if="page === 'r_page'"></div>
            <div class="box b" v-else-if="page === 'b_page'"></div>
            <div class="box g" v-else></div>
        </div>

    </div>
</body>
<script src="js/vue.js"></script>
<script>
    new Vue({
        el: '#app',
        data: {
            is_show: false,
            page: 'r_page'
        }
    })
</script>
</html>

三、循環指令

1. v-for="變量 in 可迭代對象"

(1)遍歷字符串或數組

v-for="v in str|arr"  <!--v為值-->
v-for="(v, i) in str|arr"  <!--v為值,i為索引-->

(2)遍歷對象(字典)

v-for="v in dic"  <!--v為值-->
v-for="(v, k) in dic"  <!--v為字典的value,k為字典的key-->
v-for="(v, k, i) in dic"  <!--v為字典的value,k為字典的key,i為key的索引(對字典的key優化過了,所以有索引)--> 

2. 實例

<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <title>循環指令</title>
</head>
<body>
    <div id="app">
        <!--循環指令:
            v-for="ele in string|array|obj"
        -->
        <span>{{ info }}</span>
        <hr>
        <i v-for="c in info">{{ c }} </i>
        <hr>
        <i v-for="(c, i) in info">{{i}}:{{c}}<br></i>
        <hr>

        <div v-for="e in stus">{{ e }}</div>
        <hr>
        <div v-for="(e, i) in stus">{{ i }}:{{ e }}</div>
        <hr>

        <div v-for="v in people">{{ v }}</div>
        <hr>
        <div v-for="(v, k, i) in people">{{ i }} - {{ k }}:{{ v }}</div>
        <hr>

        <div v-for="tea in teas">
            <span v-for="(v, k, i) in tea"><span v-if="i !== 0"> | </span>{{ k }}:{{ v }}</span>
        </div>

    </div>
</body>
<script src="js/vue.js"></script>
<script>
    new Vue({
        el: '#app',
        data: {
            info: 'good good study',
            stus: ['Bob', 'Tom', 'Jerry'],
            people: {
                name: '猴子',
                age: 36.7,
                sex: '女',
            },
            teas: [
                {
                    name: 'jason',
                    age: 73,
                    sex: '男',
                },
                {
                    name: 'egon',
                    age: 74,
                    sex: '男',
                },
                {
                    name: 'owen',
                    age: 17.5,
                    sex: '男',
                }
            ]
        }
    })
</script>
</html>

四、前端數據庫

  • 前端瀏覽器都自帶數據庫,下面介紹兩個前端的數據庫

1. localStorage

  • 永久存儲

(1)字符串的存取

// 存
localStorage.變量名 = 變量值;

// 取
localStorage.變量名

(2)數組等其他類型數據的存取

  • 數組等類型需要先序列化成JSON
// 存
localStorage.數組名 = JSON.stringify(數組值);

// 取
JSON.parse(localStorage.數組名)

// 清空數據庫
localStorage.clear();

2. sessionStorage

  • 臨時存儲(標簽所屬頁面被關閉后,清空數據庫)

(1)字符串的存取

// 存
sessionStorage.變量名 = 變量值;

// 取
sessionStorage.變量名

(2)數組等其他類型數據的存取

  • 數組等類型需要先序列化成JSON
// 存
sessionStorage.數組名 = JSON.stringify(數組值);

// 取
JSON.parse(sessionStorage.數組名)

// 清空數據庫
sessionStorage.clear();

3. for循環的案例

<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <title>todo list 案例</title>
    <style>
        li:hover {
            color: red;
            cursor: pointer;
        }
    </style>
</head>
<body>
    <div id="app">
        <input type="text" v-model="comment">
        <button type="button" @click="send_msg">留言</button>
        <ul>
            <li v-for="(msg, i) in msgs" @click="delete_msg(i)">{{ msg }}</li>
        </ul>
    </div>
</body>
<script src="js/vue.js"></script>
<script>
    new Vue({
        el: '#app',
        data: {
            comment: '',
            msgs: localStorage.msgs ? JSON.parse(localStorage.msgs) : [],

        },
        methods: {
            send_msg() {
                // 將comment添加到msgs數組中:unshift push 首尾增 | shift pop 首尾刪
                // this.msgs.push(this.comment);

                // 數組操作最全方法:splice(begin_index, count, ...args)
                // this.msgs.splice(0, 2);

                if (!this.comment) {
                    alert('請輸入內容');
                    return false;
                }
                this.msgs.push(this.comment);
                this.comment = '';

                localStorage.msgs = JSON.stringify(this.msgs);
            },
            delete_msg(index) {
                this.msgs.splice(index, 1);
                localStorage.msgs = JSON.stringify(this.msgs);
            }
        }
    })
</script>

</html>

五、分隔符

  • 分隔符就是當vue的插值語法即{{ }}與其他的框架的語法相沖突時,我們可以通過分隔符來修改vue的插值語法。
  • delimiters: ['[{', '}]'], // 修改插值表達式符號,將原來的 {{ }} 修改成 [{ }]
<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
    <div id="app">
        {{ msg }}
        [{ msg }]
    </div>
</body>
<script src="js/vue.js"></script>
<script>
    new Vue({
        el: '#app',
        data: {
            msg: 'message'
        },
        delimiters: ['[{', '}]'],  // 修改插值表達式符號,將原來的  {{ }} 修改成 [{ }]
    })
</script>
</html>

六、過濾器

  • vue的過濾器都需要自己定義,但其自定義過濾器的方法非常簡單

  • 自定義過濾器方法

    '''
    1、在filters成員中定義過濾器方法
    2、可以對多個值進行過濾,過濾時還可以額外傳入輔助參數
    3、過濾的結果可以再進行下一次過濾(過濾的串聯)
    
    語法:
    
    {{ n1, n2 | f1(30) | f2 }}
    	
    filters: {
    		f1(n1,n2,n3) {return 過濾結果},
    		f2(f1的res) {return 過濾結果},
    	}
    
    '''
    
  • 實例

    <!DOCTYPE html>
    <html lang="zh">
    <head>
        <meta charset="UTF-8">
        <title>過濾器</title>
    </head>
    <body>
        <div id="app">
            <!--
            總結:
            1、在filters成員中定義過濾器方法
            2、可以對多個值進行過濾,過濾時還可以額外傳入輔助參數
            3、過濾的結果可以再進行下一次過濾(過濾的串聯)
            -->
            <p>{{ num | f1 }}</p>
            <p>{{ a, b | f2(30, 40) | f3 }}</p>
        </div>
    </body>
    <script src="js/vue.js"></script>
    <script>
        new Vue({
            el: '#app',
            data: {
                num: 10,
                a: 10,
                b: 20,
            },
            filters: {
                // 傳入所有要過濾的條件,返回值就是過濾的結果
                f1 (num) {
                    console.log(num);
                    return num * 10;
                },
                f2 (a, b, c, d) {
                    console.log(a, b, c, d);
                    return a + b + c + d;
                },
                f3 (num) {
                    return num * num;
                }
            }
        })
    </script>
    </html>
    

七、計算屬性

  • 用法和注意
'''
1、computed計算屬性可以聲明 方法屬性(方法屬性一定不能在data中重復聲明)
2、方法屬性 必須在頁面中渲染,才會啟用綁定的方法,方法屬性的值就是綁定方法的返回值
3、綁定的方法中出現的所有變量都會被監聽,任何一個變量的值變化、更新都會重新觸發綁定方法,從而更新方法屬性的返回值

一般用來解決的問題:一個變量值依賴於多個變量

'''
  • 實例
<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
    <div id="app">
        <input type="number" min="0" max="100" v-model="n1">
        
        <input type="number" min="0" max="100" v-model="n2">
        
        <!--必須在頁面上渲染-->
        <button>{{ result }}</button> 
    </div>
</body>
<script src="js/vue.js"></script>
<script>
    new Vue({
        el: '#app',
        data: {
            n1: '',
            n2: '',
            // result: 0,  // 不能在data中重復聲明
        },

        computed: {
            result () {
                console.log('被調用了');
                n1 = +this.n1;
                n2 = +this.n2;
                return n1 + n2;
            }
        }
    })
</script>
</html>

八、監聽屬性

  • 使用和注意
'''

1、監聽的屬性需要在data中聲明,監聽方法不需要返回值
2、監聽的方法名就是監聽的屬性名,該屬性值發生更新時就會回調監聽方法
3、監聽方法有兩個回調參數:當前值,上一次值

 解決的問題:多個變量值依賴於一個變量值

'''
  • 實例
<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
    <div id="app">
        <p>姓名:<input type="text" v-model="full_name"></p>
        <p>姓:{{ first_name }}</p>
        <p>名:{{ last_name }}</p>
    </div>
</body>
<script src="js/vue.js"></script>
<script>
    new Vue({
        el: '#app',
        data: {
            full_name: '',
            first_name: '未知',
            last_name: '未知',
        },
        watch: {
            // n是監聽的屬性當前值,o是其上一次的值,監聽的屬性值每次更新都會回調監聽方法
            full_name(n, o) {
                name_arr = n.split('');
                this.first_name = name_arr[0];
                this.last_name = name_arr[1];
            },
        }
    })
</script>
</html>

九、冒泡排序

  • 公式
// 按照分數進行排名
    for (let i=0; i<可迭代對象.length-1; i++) {
        for (let j=0; j<可迭代對象.length-1-i; j++) {
            // 處理條件即可
            if ( a>b ) {  // 排序方式
                // 交叉賦值,互換位置
                a,b = b,a
            }
        }
    }
  • 實例
// 對數組排序
let arr = [3, 2, 5, 4, 1];

for (let i = 0; i < arr.length - 1; i++) {  // 外層循環控制趟數
        for (let j = 0; j < arr.length - 1 - i; j++) {  // 內存循環控制比較次數
            if (arr[j] > arr[j + 1]) {
                let temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
            }
        }
    }

// 對字典排序

stus = [
        {
            name: 'Bob',
            grade: 98
        },
        {
            name: 'Tom',
            grade: 87
        },
        {
            name: 'Jerry',
            grade: 92
        },
    ];

// 按照分數進行排名
    for (let i=0; i<stus.length-1; i++) {
        for (let j=0; j<stus.length-1-i; j++) {
            // 處理條件即可
            if (stus[j].grade > stus[j + 1].grade) {
                let temp = stus[j];
                stus[j] = stus[j + 1];
                stus[j + 1] = temp;
            }
        }
    }


免責聲明!

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



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