初学vue

初学vue

1.cloak

解决页面闪动问题

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        [v-cloak] {
            display: none;
        }
    </style>
</head>

<body>
    <div id="app">
        <div v-cloak>{{msg}}</div>
    </div>
    <script src="../vue.js"></script>
    <script>
        // sad
        /*
         v-cloak指令的用法
         1.提供样式
         [v-cloak]{
             display:none
         }
         2.在插值表达式所在的标签中添加v-cloak指令

         背后的原理:先通过样式隐藏内容  然后在内存中进行值的替换  替换好之后再显示最终的结果
         */

        var vm = new Vue({
            el: '#app',
            data: {
                msg: 'hello Vue'
            }
        });
    </script>
</body>

</html>

2.v-text、v-html、v-pre、

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        [v-cloak] {
            display: none;
        }
    </style>
</head>

<body>
    <div id="app">
        <div v-cloak>{{msg}}</div>
        <div v-text="msg"></div>
        <div v-html="msg1"></div>
        <div v-pre>{{msg}}</div>
    </div>
    <script src="../vue.js"></script>
    <script>
        // sad
        /*
         v-cloak指令的用法
         1.提供样式
         [v-cloak]{
             display:none
         }
         2.在插值表达式所在的标签中添加v-cloak指令

         背后的原理:先通过样式隐藏内容  然后在内存中进行值的替换  替换好之后再显示最终的结果
         */

        var vm = new Vue({
            el: '#app',
            data: {
                msg: 'hello Vue',
                msg1: "<h1>HTML</h1>"
            }
        });
    </script>
</body>

</html>

3、数据响应式

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        [v-cloak] {
            display: none;
        }
    </style>
</head>

<body>
    <div id="app">
        <div v-cloak>{{msg}}</div>
        <div v-once>{{info}}</div>
    </div>
    <script src="../vue.js"></script>
    <script>
        // 
        /* 
        v-once的应用场景:如果显示的信息后续不需要再修改  
        可以使用v-once可以提高性能
         */
        var vm = new Vue({
            el: '#app',
            data: {
                msg: 'hello Vue',
                info: 123
            }
        });
    </script>
</body>

</html>

4、双向数据绑定

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        [v-cloak] {
            display: none;
        }
    </style>
</head>

<body>
    <div id="app">
        <div v-cloak>{{msg}}</div>
        <div v-once>{{info}}</div>
    </div>
    <script src="../vue.js"></script>
    <script>
        // 
        /* 
        v-once的应用场景:如果显示的信息后续不需要再修改  
        可以使用v-once可以提高性能
         */
        var vm = new Vue({
            el: '#app',
            data: {
                msg: 'hello Vue',
                info: 123
            }
        });
    </script>
</body>

</html>

5、事件绑定

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        [v-cloak] {
            display: none;
        }
    </style>
</head>

<body>
    <div id="app">
        <div v-cloak>{{num}}</div>
        <div>
            <button v-on:click="num++">点击</button>
            <button @click='num++'>点击1</button>
            <button @click='handle'>点击2</button>
            <button @click='handle()'>点击3</button>

        </div>
    </div>
    <script src="../vue.js"></script>
    <script>
        var vm = new Vue({
            el: '#app',
            data: {
                num: 0,
            },
            methods: {
                handle: function() {
                    // 这里的this就是vue的实例对象
                    console.log(this == vm);
                    this.num++;
                }
            }
        })
    </script>
</body>

</html>

6、事件对象的基本使用

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        [v-cloak] {
            display: none;
        }
    </style>
</head>

<body>
    <div id="app">
        <div v-cloak>{{num}}</div>
        <div><button v-on:click="handle1">点击</button></div>
        <div><button v-on:click="handle(123,456,$event)">点击带传参</button></div>

    </div>
    <script src="../vue.js"></script>
    <!-- 

        1.如果事件直接绑定函数名称  那么默认会携带事件对象作为事件函数的第一个参数
        2.如果事件绑定调用,那么事件对象必须作为最后一个参数进行传递  显式传递  并且事件的名称必须是$event
     -->
    <script>
        var vm = new Vue({
            el: '#app',
            data: {
                num: 0
            },
            methods: {
                handle: function(p, p1, event) {
                    console.log(p);
                    console.log(p1);
                    console.log(event.target.innerHTML);
                    this.num++;
                },
                handle1: function(event) {
                    console.log(event.target.innerHTML);
                    this.num++;

                }
            }
        })
    </script>
</body>

</html>

7.事件修饰符

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        [v-cloak] {
            display: none;
        }
    </style>
</head>

<body>
    <div id="app">
        <div v-cloak>{{num}}</div>
        <div v-on:click='handle0'><button v-on:click.stop="handle1">点击</button></div>
        <a href="http://www.baidu.com" v-on:click.prevent="">阻止默认事件</a>
    </div>
    <script src="../vue.js"></script>
    <script>
        var vm = new Vue({
            el: '#app',
            data: {
                num: 0
            },
            methods: {
                handle0() {
                    this.num++;
                },
                handle1: function(event) {
                    //阻止事件冒泡
                    // event.stopPropagation()
                    console.log(event.target.innerHTML);
                    this.num++;

                }
            }
        })
    </script>
</body>

</html>

8、按键修饰符

<!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>
    <div id="app">
        <form action="">
            <div>
                用户名:
                <input type="text" v-on:keyup.delete="clearContent" v-model="uname">
            </div>
            <div>
                密码:
                <input type="text" v-model="pwd" v-on:keyup.enter="handleSubmit">
            </div>
            <div>
                <input type="button" v-on:click="handleSubmit" value="提交">
            </div>
        </form>
    </div>
    <script src="../vue.js"></script>
    <script>
        /* 事件绑定  按键修饰符 */
        var vm = new Vue({
            el: '#app',
            data: {
                uname: '',
                pwd: ''
            },
            methods: {
                handleSubmit() {
                    console.log(this.uname, this.pwd);
                },
                clearContent() {
                    //按delete键时 清空用户名
                    this.uname = ""
                }
            }
        })
    </script>
</body>

</html>

9、自定义按键修饰符

<!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>
    <div id="app">
        <input type="text" v-on:keyup.aaa="handle" v-model="info">
    </div>
    <script src="../vue.js"></script>
    <script>
        /* 
                事件绑定 自定义按键修饰符 
                规则:自定义按键修饰符名字是自定义的  但是对应的值必须是按键对应的event.keycode值
                */
        Vue.config.keyCodes.aaa = 65
        var vm = new Vue({
            el: '#app',
            data: {
                info: ''
            },
            methods: {
                handle(event) {
                    console.log(event.keyCode);
                },
            }
        })
    </script>
</body>

</html>

10、属性绑定

<!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>
    <div id="app">
        <a v-bind:href="url">百度</a>
        <a :href="url">百度1</a>

        <button v-on:click="handle">切换</button>
    </div>
    <script src="../vue.js"></script>
    <script>
        var vm = new Vue({
            el: '#app',
            data: {
                url: 'http://www.baidu.com'
            },
            methods: {
                handle() {
                    //修改url地址
                    this.url = "http://www.jd.com"
                }
            }
        })
    </script>
</body>

</html>

11、样式绑定

对象的形式

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        .active {
            border: 1px solid #000;
            width: 100px;
            height: 100px;
        }
        
        .error {
            background-color: #f00;
            width: 100px;
            height: 100px;
        }
    </style>
</head>

<body>
    <div id="app">
        <div :class="{active:isActive,error:isError}"></div>
        <button v-on:click="handle">切换</button>
    </div>
    <script src="../vue.js"></script>
    <script>
        var vm = new Vue({
            el: '#app',
            data: {
                isActive: true,
                isError: false,
            },
            methods: {
                handle() {
                    this.isActive = !this.isActive
                    this.isError = !this.isError
                }
            }
        })
    </script>
</body>

</html>

数组的形式

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        .active {
            border: 1px solid #000;
            width: 100px;
            height: 100px;
        }
        
        .error {
            background-color: #f00;
            width: 100px;
            height: 100px;
        }
    </style>
</head>

<body>
    <div id="app">
        <div :class="[activeClass,errorClass]"></div>
        <button v-on:click="handle">切换</button>
    </div>
    <script src="../vue.js"></script>
    <script>
        var vm = new Vue({
            el: '#app',
            data: {
                activeClass: 'active',
                errorClass: 'error'
            },
            methods: {
                handle() {
                    this.activeClass = ''
                }
            }
        })
    </script>
</body>

</html>

混合

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        .active {
            border: 1px solid #000;
            width: 100px;
            height: 100px;
        }
        
        .error {
            background-color: #f00;
            width: 100px;
            height: 100px;
        }
        
        .test {
            color: blue;
        }
        
        .base {
            font-size: 28px;
        }
    </style>
</head>

<body>
    <div id="app">
        <div :class="[activeClass,errorClass,{test:isTest}]">测试样式</div>
        <div v-bind:class="arrClasses"></div>
        <div v-bind:class="objClasses"></div>
        <div class="base" v-bind:class="objClasses">测试样式</div>
        <button v-on:click="handle">切换</button>
    </div>
    <script src="../vue.js"></script>
    <script>
        // 
        /* 
        样式绑定相关语法细节:
        1.对象绑定和数组绑定可以结合使用
        2.class绑定的值  可以简化操作
        3.默认的class如何处理  默认的class会保留
        */
        var vm = new Vue({
            el: '#app',
            data: {
                activeClass: 'active',
                errorClass: 'error',
                isTest: true,
                arrClasses: ['active', 'error'],
                objClasses: {
                    active: true,
                    error: true,
                },
            },
            methods: {
                handle() {
                    // this.isTest = !this.isTest
                    this.objClasses.error = false
                }
            }
        })
    </script>
</body>

</html>

12、分支结构

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>

    </style>
</head>

<body>
    <div id="app">
        <div v-if='score>=90'>优秀</div>
        <div v-else-if='score<90&&score>=80'>良好</div>
        <div v-else-if='score<80&&score>=60'>一般</div>
        <div v-else></div>
        <input type="text" v-model="score">
        <div v-show="flag">测试v-show</div>
        <button v-on:click="handle">切换</button>
    </div>
    <script src="../vue.js"></script>
    <script>
        // 
        /* 
        v-show的原理   控制元素样式是否显示 display:none
        */
        var vm = new Vue({
            el: '#app',
            data: {
                score: 99,
                flag: false,
            },
            methods: {
                handle: function() {
                    this.flag = !this.flag
                }
            }
        })
    </script>
</body>

</html>

13、循环结构

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>

    </style>
</head>

<body>
    <div id="app">
        <div>水果列表</div>
        <ul>
            <li v-for="item in fruits">{{item}}</li>
            <li v-for="(item,index) in fruits">{{item+'-----'+index}}</li>
            <li v-for="(item,index) in myFruits" :key="item.id">
                <span>{{item.ename}}</span>
                <span>----</span>
                <span>{{item.cname}}</span>
            </li>
        </ul>
    </div>
    <script src="../vue.js"></script>
    <script>
        // 
        /* 
        v-show的原理   控制元素样式是否显示 display:none
        */
        var vm = new Vue({
            el: '#app',
            data: {
                fruits: ['apple', 'orange', 'banana'],
                myFruits: [{
                    id: 1,
                    ename: 'apple',
                    cname: '苹果',
                }, {
                    id: 2,
                    ename: 'orange',
                    cname: '橘子',
                }, {
                    id: 3,
                    ename: 'banana',
                    cname: '香蕉',
                }, ]
            },
            methods: {

            }
        })
    </script>
</body>

</html>

14、循环分支结合使用

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>

    </style>
</head>

<body>
    <div id="app">
        <div v-if="obj.age>12" v-for="(value,key,index) in obj">{{value + '----'+key+'-----'+index}}</div>
    </div>
    <script src="../vue.js"></script>
    <script>
        // 
        /* 
         */
        var obj = {
            uname: 'list',
            age: 12,
            gender: 'male'
        }
        var vm = new Vue({
            el: '#app',
            data: {
                obj: {
                    uname: 'list',
                    age: 12,
                    gender: 'male'
                }
            },
            methods: {

            }
        })
    </script>
</body>

</html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值