• Vue 指令


    表单指令

    表单指令:  v-model="变量"   变量值与表单标签的value相关
    v-model可以实现数据的双向绑定:v-model绑定的变量值可以影响表单标签的值,
    反过来单标签的值也可以影响变量的值

    v-model="变量" 变量与value有关,data里面放的是变量的默认初始值

    普通:变量就代表value值
    单选框:当前选中的单选框中的value值
    单一复选框:变量为布尔,代表是否选中
    多复选框:变量为数组存放选中的选项value

    <!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>

    条件指令

    v-show="布尔变量"   隐藏时,采用display:none进行渲染
    v-if="布尔变量" 隐藏时,不再页面中渲染(保证不渲染的数据泄露)
    ----------------------------------------------------------
    v-if  |  v-else-if  |  v-else

    斗篷指令

    [v-cloak] { display: none; }
    <div id="app" v-cloak>

    避免页面闪烁

    <style type="text/css">
        [v-cloak] { display: none; }
    </style>
    <div id="app" v-cloak>
        {{ msg }}
    </div>
    <script src="js/vue.min.js"></script>
    <script type="text/javascript">
        new Vue({
            el: "#app",
            data: {
                msg: "message"
            }
        })
    </script>
    <!-- 避免页面闪烁-->
    <!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>

    循环指令

    v-for="ele in string | array | obj"
    <!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>  c表示值,i表示索引  0:g
            <hr>
    
            <div v-for="e in stus">{{ e }}</div>
            <hr>
    
            <div v-for="(e, i) in stus">{{ i }}:{{ e }}</div>  0:Bob
            <hr>
    
            <div v-for="v in people">{{ v }}</div> 字典的V
            <hr>
    
            <div v-for="(v, k, i) in people">{{ i }} - {{ k }}:{{ v }}</div>  0 - name:猴子
            <hr>
    
            <div v-for="tea in teas">  索引为1的不加| 
                <span v-for="(v, k, i) in tea"><span v-if="i !== 0"> | </span>{{ k }}:{{ v }}</span>  name:jason | age:73 | sex:男
            </div>
    
            <br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
        </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>

    todolist案例

    数组的操作

    将comment添加到msgs数组中:unshift  push 首尾增 | shift  pop 首尾删
    msgs.push(comment);
    
    数组操作最全方法:splice(begin_index, count, ...args)
    从哪一位开始,操作多少位,操作成什么

    前台数据库

        前台数据库
        localStorage: 永久存储
        sessionStorage:临时存储(所属页面标签被关闭后,清空)
    
        存
        localStorage.n1 = 10;
        sessionStorage.n2 = 20;
    
        取
        console.log(localStorage.n1);
        console.log(sessionStorage.n2);
    
        数组等类型需要先序列化成JSON
        localStorage.arr = JSON.stringify([1, 2, 3]);  数组 存
        console.log(JSON.parse(localStorage.arr));     数组 取
    
        清空数据库
        localStorage.clear();
    <!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) : [],
            },//三元表达,如果数据库中有msg,从数据库中取值,如果没有值,就返回空
            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 = ''; //留完言,清空input框
    
                    localStorage.msgs = JSON.stringify(this.msgs);//同步数据库
                },
                delete_msg(index) {
                    this.msgs.splice(index, 1); //从给的索引的位置开始,操作一位,操作为空
                    localStorage.msgs = JSON.stringify(this.msgs); //同步数据库
                }
            }
        })
    </script>
    <script>
        // 前台数据库
        // localStorage: 永久存储
        // sessionStorage:临时存储(所属页面标签被关闭后,清空)
    
        //
        // localStorage.n1 = 10;
        // sessionStorage.n2 = 20;
    
        //
        // console.log(localStorage.n1);
        // console.log(sessionStorage.n2);
    
        // 数组等类型需要先序列化成JSON
        // localStorage.arr = JSON.stringify([1, 2, 3]);  数组 存
        // console.log(JSON.parse(localStorage.arr));     数组  取
    
        // 清空数据库
        // localStorage.clear();
    </script>
    </html>

    分隔符成员

    修改插值表示式符号

    <!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>

    过滤器

    { {  num | f1  } }
    { { a, b | f2(30, 40) | f3 } }
    filters: {
    // 传入所有要过滤的条件,返回值就是过滤的结果
    f1 (num) {
    console.log(num);
    return num * 10;
    1、在filters成员中定义过滤器方法
    2、可以对多个值进行过滤,过滤时还可以额外传入辅助参数
    3、过滤的结果可以再进行下一次过滤(过滤的串联)
    <!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中重复声明
            },
            /**
             * 总结:
             * 1、computed计算属性可以声明 方法属性(方法属性一定不能在data中重复声明)
             * 2、方法属性 必须在页面中渲染,才会启用绑定的方法,方法属性的值就是绑定方法的返回值
             * 3、绑定的方法中出现的所有变量都会被监听,任何一个变化发生值更新都会重新出发绑定方法,从而更新方法属性的值
             *
             * 一般用来解决的问题:一个变量值依赖于多个变量
             */
            computed: {
                result () {
                    console.log('被调用了');
                    n1 = +this.n1;
                    n2 = +this.n2;
                    return n1 + n2;
                }
            }
        })
    </script>
    </html>

    监听属性

    watch:
    1、监听的属性需要在data中声明,监听方法不需要返回值
    2、监听的方法名就是监听的属性名,该属性值发生更新时就会回调监听方法
    3、监听方法有两个回调参数:当前值,上一次值

    { { $data } }
    { "full_name": "", "first_name": "未知", "last_name": "未知" }


    解决的问题:多个变量值依赖于一个变量值
    <!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>
          {{$data}} //{ "full_name": "", "first_name": "未知", "last_name": "未知" }
    </div> </body> <script src="js/vue.js"></script> <script> new Vue({ el: '#app', data: { full_name: '', first_name: '未知', last_name: '未知', }, watch: { // n是监听的属性当前值,o是其上一次的值,监听的属性值每次更新都会回调监听方法 /** * 总结: * 1、监听的属性需要在data中声明,监听方法不需要返回值 * 2、监听的方法名就是监听的属性名,该属性值发生更新时就会回调监听方法 * 3、监听方法有两个回调参数:当前值,上一次值 * * 解决的问题:多个变量值依赖于一个变量值 */ full_name(n, o) { name_arr = n.split(''); this.first_name = name_arr[0]; this.last_name = name_arr[1]; }, } }) </script> </html>

    冒泡排序

    <!DOCTYPE html>
    <html lang="zh">
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
        <div id="app">
    
        </div>
    </body>
    <script src="js/vue.js"></script>
    <script>
        new Vue({
            el: '#app',
            data: {
    
            }
        })
    </script>
    <script>
    
        let arr = [3, 2, 5, 4, 1];
        console.log(arr);
    
        // 冒泡排序
        // 3, 2, 5, 4, 1
    
        // 2, 3, 4, 1, 5
        // 2, 3, 1, 4
        // 2, 1, 3
        // 1, 2
        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;
                }
            }
        }
        console.log(arr);
    
    
        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;
                }
            }
        }
    
        console.log(stus);
    
    
    
    </script>
    </html>
  • 相关阅读:
    2008年总结
    感触
    24105
    事情总喜欢蜂拥而至
    最后的稻草
    什么叫服务
    sigh,终于submit了
    在工作和生活的狭缝中生存着
    不应该,不应该
    ren 人 认 忍 韧 仁
  • 原文地址:https://www.cnblogs.com/fjn839199790/p/12056641.html
Copyright © 2020-2023  润新知