• Vue.js入门


    引用vue.js文件

    <script src="https://unpkg.com/vue/dist/vue.js"></script>

    Vue.js常用指令

    • v-if

    v-if指令可以根据表达式的值在DOM中生成或移除元素

    <div id="xiu">
        <p v-if="kang">修抗</p>
    </div>
    <script>
        new Vue({
            el: '#xiu',
            data: {
                kang: true
            }
        })
    </script>
    • v-show

    v-show指令可以根据表达式的值在DOM中隐藏或显示元素

    如果隐藏的话,会在元素中添加一个内联样式:style="display:none"

    <div id="xiu">
        <p v-show="kang">修抗</p>
    </div>
    <script>
        new Vue({
            el: '#xiu',
            data: {
                kang: false
            }
        })
    </script>

    v-show指令有更高的初始渲染消耗,需要频繁切换时使用

    v-if指令有更高的切换消耗,运行时条件不太可能改变时使用

    • v-else

    v-else指令为false时可以显示表达式的值

    v-else指令需要和v-if指令一起使用

    <div id="xiu">
        <P v-if="ok">true</P>
        <p v-else="ok">false</p>
    </div>
    <script>
        new Vue({
            el: '#xiu',
            data: {
                ok: false
            }
        })
    </script>
    • v-text

     v-text指令与{{ }}效果一样

    <p v-text="xiu"></p>
    <p>{{xiu}}</p>
    • v-html

     v-html指令可以动态渲染任意HTML判断

    <div class="xiu" v-html="kang"> </div>
    <script>
        new Vue({
            el:".xiu",
            data: {
                kang:"<h1>标题</h1>"
            }
        })
    </script>
    • v-pre

     v-pre指令用来跳过这个元素和它的子元素的编译,直接显示原始的Mustache标签:{{kang}}

    <div id="app">
        <span v-pre>{{kang}}</span>
    </div>
    <script>
        new Vue({
            el:'#app',
            data:{
                kang: 'Hello World!'
            }
        })
    </script>
    • v-cloak

     v-cloak指令防止刷新数据之前闪烁{{name}}

    <style>
        [v-cloak] {
            display: none;
        }
    </style>
    <div id="app" v-cloak >
        <p>{{name}}</p>
    </div>
    <script>
    new Vue({
        el:"#app",
        data: {
            name: "修抗"
        }
    })
    </script>
    • v-bind

     v-bind指令用于响应式更新HTML特性(v-bind可以默认不写)

    <div id="xiu">
        <a v-bind:href="url">百度</a><!-- v-bind可以默认不写 -->
    </div>
    <script>
        new Vue({
            el: '#xiu',
            data: {
                url:"https://www.baidu.com/"
            }
        });
    </script>

     v-bind显示或隐藏多个css属性

    第一种方式:

    <style>
        .fontSize {
            font-size: 20px;
        }
        .backgroundColor {
            background: red;
        }
    </style>
    <div id="box">
        <p v-bind:class="[size,color]">文字颜色</p>
    </div>
    <script>
        new Vue({
            el: '#box',
            data: {
                size: 'fontSize',
                color: 'backgroundColor'
            }
        });
    </script>

    第二种方式:

    <style>
        .fontSize {
            font-size: 20px;
        }
        .backgroundColor {
            background: red;
        }
    </style>
    <div id="box">
        <p v-bind:class="{fontSize:true,backgroundColor:true}">文字颜色</p>
    </div>
    <script>
        new Vue({
            el: '#box'
        });
    </script>

    第三种方式:

    <style>
        .fontSize {
            font-size: 20px;
        }
        .backgroundColor {
            background: red;
        }
    </style>
    <div id="box">
        <p v-bind:class="{fontSize:z,backgroundColor:c}">文字颜色</p>
    </div>
    <script>
        new Vue({
            el: '#box',
            data: {
                z: true,
                c: true
            }
        });
    </script>

    第四种方式:

    <style>
        .fontSize {
            font-size: 20px;
        }
        .backgroundColor {
            background: red;
        }
    </style>
    <div id="box">
        <p v-bind:class="json">文字颜色</p>
    </div>
    <script>
        new Vue({
            el: '#box',
            data: {
                json: {
                    fontSize:true,
                    backgroundColor:true
                }
            }
        });
    </script>
    • v-model

    v-model指令用于input、select、text、CheckBox、radio等表单控件元素上创建双向数据绑定

    <div id="xiu">
        <input type="checkbox" v-model="kang">
    </div>
    <script>
        new Vue({
            el: '#xiu',
            data: {
                kang: true 
            }
        })
    </script>

    v-model指令的lazy参数(同步输入框的值和数据,lazy可以默认不写)

    <div id="xiu">
        <input v-model="msg" lazy/>
        {{msg}}
    </div>
    <script>
        new Vue({
            el: '#xiu',
            data: {
                msg:'修改文本框的值查看效果'
            }
        })
    </script>

    v-model指令的debounce参数(设置一个最小延迟,比如在input输入内容时随时发送Ajax请求,设置5000毫秒发送一次)

    <input v-model="msg" debounce="5000"/>
    • v-for

     v-for指令语法:xiu : kang (kang是源数据数组,xiu是kang的别名)

    方法一:(绑定数据到数组)

    <div id="xiu">
        <ul>
            <template v-for="place in places">
                <li>{{ place.name }}</li>
            </template>
        </ul>
    </div>
    <script>
        new Vue({
            el: '#xiu',
            data: {
                places: [
                    { name: '厦门' },
                    { name: '漳州' },
                    { name: '福州' }
                ]
            }
        })
    </script>

    方法二:(通过对象的属性来迭代数据)

    value对象的值(必填)

    key对象的属性

    index对象的索引

    <div id="xiu">
        <p v-for="(value,key,index) in object">
            {{ index }}{{key}}:{{value}}
        </p>
    </div>
    <script>
        new Vue({
            el: '#xiu',
            data: {
                object: {
                    name: "修抗",
                    url: "www.xiukang.com",
                    index: "教育"
                }
            }
        })
    </script>

    方法三:(循环一个整数)

    <div id="xiu">
        <p v-for="value in 10">
            {{value}}
        </p>
    </div>
    <script>
        new Vue({
            el: '#xiu'
        })
    </script>
    • v-on

    v-on指令用来绑定事件的

    绑定事件

    <div id="app">
        <button v-on:click="onClick">按钮</button>
    </div>
    <script>
        new Vue({
            el:"#app",
            methods: {
                onClick:function(){
                    alert(new Date())
                }
            }
        })
    </script>

    绑定提交事件

    <form id="xiu" v-on:submit="onSubmit">
        <input type="text"/>
        <input type="submit" value="提交"/>
    </form>
    
    <script>
    new Vue({
        el:"#xiu",
        methods: {
            onSubmit: function(){
                alert("提交事件");
            }
        }
    })
    </script>

    el、data、methods、computed、watch介绍

    • el

    el指Vue实例挂载的元素节点

    • data

    data值初始化的值

    • template

    template创建虚拟DOM渲染函数

    <div id="app"></div>
    <script>
        new Vue({
            el: '#app',
            template: '<p>{{ say }}</p>',
            data: {
                say:"修抗"
            }
        })
    </script>
    • methods

    methods必须要有一定的触发条件才能执行,如点击事件

    <div id="app">
        <p>{{ say() }}</p>
    </div>
    <script>
    new Vue({
        el: '#app',
        methods: {
            say: function () {
                return '我要成为海贼王'
            }
        }
    })
    </script>
    • computed

    computed是在HTML DOM加载后马上执行的,如赋值

    <div id="app">
        {{firstName}} · {{secName}} · {{thirdName}}
    </div>
    <script>
    var vm = new Vue({
        el: '#app',
        /*
        data选项中的数据:firstName,secName,thirdName
        computed监控的数据:lufei_Name
        两者关系: lufei_Name = firstName + secName + thirdName
        所以等式右边三个数据任一改变,都会直接修改 lufei_Name
        */
        data: {
        // 路飞的全名:蒙奇·D·路飞
            firstName: '蒙奇',
            secName: 'D',
            thirdName: '路飞'
        },
        computed: {
            luFei_Name: function () {
                return this.firstName + this.secName + this.thirdName
            }
        }
    })
    // 将“路飞”改为“海军王”
    vm.thirdName = '海军王'</script>
    • watch

    watch呢?它用于观察Vue实例上的数据变动。对应一个对象,键是观察表达式,值是对应回调。值也可以是方法名,或者是对象,包含选项。

    <div id="app">
        {{haiZeiTuan_Name}} · {{suoLong}} · {{naMei}}· {{xiangJiShi}}
    </div>
    <script>
    var vm = new Vue({
        el: '#app',
        data: {
            haiZeiTuan_Name: '草帽海贼团',
            suoLong: '草帽海贼团索隆',
            naMei: '草帽海贼团娜美',
            xiangJiShi: '草帽海贼团香吉士'
        },
        watch: {
            haiZeiTuan_Name: function (newName) {
                this.suoLong = newName + '索隆'
                this.naMei = newName + '娜美'
                this.xiangJiShi = newName + '香吉士'
            }
        }
    })
    vm.haiZeiTuan_Name = '橡胶海贼团'
    </script>
    • computed、methods、watch执行顺序

    默认加载的时候先computed再watch,不执行methods;

    等触发某一事件后,则是:先methods再watch。

    • 数组变动检测

    push()在最后添加

    pop()删除最后一个

    shift()删除第一个

    unshift()在开头添加

    splice()从下标为start开始删除deleteCount个元素,并在该位置添加val,val2 

    sort()排序

    reverse()

    <div id="app">
        <p>{{xiu}}</p>
        <button v-on:click="kang">按钮</button>
    </div>
    <script>
    new Vue({
        el:"#app",
        data: {
            xiu: ["23","1","3","4"]
        },
        methods: {
            kang:function(){
                this.xiu.push("23");
            }
        }
    })
    </script>
    • 内置过滤器
    • 1.filterBy(0.12版本)
  • 相关阅读:
    这些奇葩的排序算法,你没见过动画吧?
    五分钟学会一个高难度算法:希尔排序
    看完动画你还会不懂 快速排序么
    动画演示二叉树的前序遍历
    一款基于jQuery日历插件的开发过程
    图片全部加载完成之后再显示页面ui,公司项目里用上,自己写的几行代码
    转:SQL Server附加数据库提示“版本为661,无法打开,支持655版本……”
    Android基础-TextView(文本控件)
    Android基础-UI控件(整体简单介绍)
    Android基础-相对布局(电影页面为例)
  • 原文地址:https://www.cnblogs.com/xiukang/p/8969403.html
Copyright © 2020-2023  润新知