美文网首页
Vue-入门

Vue-入门

作者: 徐弱西 | 来源:发表于2019-07-16 12:44 被阅读0次

    一.认识vue

    1.什么是vue

    以数据驱动的web渐进式框架

    2.vue优点

    • 以数据驱动,不直接操作DOM,效率高
    • 单页面应用,减少请求页面次数,速度快
    • 数据的双向绑定,更新快
    • 虚拟DOM,开发操作数据,数据更新虚拟DOM,虚拟DOM渲染真实DOM
    • 组件化开发

    二.vue入门

    1.实例

    <div id="app"></div>
    
    <script>
    // new一个Vue就是一个实例
    // 实例与页面对应挂载点的所有页面结构一一绑定
    // 一个页面中可以出现多个实例(挂载点),建议只出现一个实例,且挂载点用id
    new Vue({
        // 挂载点
        el: "#app"
    })
    </script>
    

    2.数据 data

    <div id="app">
        <!-- 插值表达式中存放的为变量,变量需要在vue实例的$data中进行初始化 -->
        {{ msg }}
    </div>
    
    <script>
    var app = new Vue({
        el: "#app",
        data: {
            msg: "数据"
        }
    })
    </script>
    
    <script>
        app.$data.msg;
        app.msg
    </script>
    
    

    3.方法 methods

    <div id="app">
        <!-- v-on: 指令,操作事件的 -->
        <p class="box" v-on:click="boxAction">{{ msg }}</p>
    </div>
    
    <script>
        new Vue({
            el: "#app",
            data: {
                msg: "数据"
            },
            // methods为挂载点内部提供方法的实现体
            methods: {
                boxAction: function(ev) {
                    console.log(ev)
                }
            }
        })
    </script>
    

    4.计算 computed

    <div id="app">
        <input type="text" v-model="a">
        <input type="text" v-model="b">
        <div>
            {{ c }}
        </div>
    </div>
    
    <script>
        // 一个变量依赖于多个变量
        new Vue({
            el: "#app",
            data: {
                a: "",
                b: "",
            },
            computed: {
                c: function() {
                    // this代表该vue实例
                    return this.a + this.b;
                }
            }
        })
    </script>
    

    5.监听 watch

    <div id="app">
        <input type="text" v-model="ab">
        <div>
            {{ a }}
            {{ b }}
        </div>
    </div>
    
    <script>
        // 多个变量依赖于一个变量
        new Vue({
            el: "#app",
            data: {
                ab: "",
                a: "",
                b: "",
            },
            watch: {
                ab: function() {
                    // 逻辑根据需求而定
                    this.a = this.ab[0];
                    this.b = this.ab[1];
                }
            }
        })
    </script>
    

    6.生命周期钩子

    • 表示一个vue实例从创建到销毁的这个过程,将这个过程的一些时间节点赋予了对应的钩子函数
    • 钩子函数: 满足特点条件被回调的方法
    new Vue({
        el: "#app",
        data: {
            msg: "message"
        },
        beforeCreate () {
            console.log("实例刚刚创建");
            console.log(this.msg);
        },
        created () {
            console.log("实例创建成功, data, methods");
            console.log(this.msg);
        }
        // 拿到需求 => 确定钩子函数 => 解决需求的逻辑代码块
    })
    

    vue-实例:

    <!DOCTYPE html>
    <html lang="zh">
    <head>
        <meta charset="UTF-8">
        <title>vue实例</title>
        <style type="text/css">
            p {
                width: 200px;
                height: 200px;
                background-color: red;
            }
        </style>
    </head>
    <body>
        <div id="app" class="app">
            <p title="你真的是P">你是P</p>
            <!-- v-bind: 属于vue语法:vue指令 -->
            <!-- 第一个title是html标签的全局属性title -->
            <!-- 第二个title是vue的一个变量,变量名可以随意自定义 -->
            <p v-bind:title="title">你就是P</p>
            <!-- vue的变量一般需要进行初始化(赋初值) -->
    
        </div>
    
        <div id="main">
            <p v-bind:title="my_title">你还是P</p>
        </div>
    </body>
    <!-- 在页面中引入vue -->
    <script src="js/vue-2.5.17.js"></script>
    <!-- 拥有vue环境后可以写vue支持的语法逻辑 -->
    <script type="text/javascript">
        // 自身代码块
        
        // 创建vue实例
        new Vue({  
            // 将实例与页面结构进行关联, 尽量(只允许)用id进行绑定(将唯一的对象与页面唯一的结构进行一一绑定)
            // 该实例只操作关联的页面结构(包含子结构)
            // el: "#app"
            el: '.app',
            data: {
                title: "你就是P..."
            }
        });
    
        // 将一个vue实例挂载到页面的一个页面结构
        new Vue({
            // 挂载点
            el: "#main",
            data: {
                my_title: ""
            }
        })
    
    </script>
    </html>
    

    Vue-data:

    <!DOCTYPE html>
    <html lang="zh">
    <head>
        <meta charset="UTF-8">
        <title>vue实例之data</title>
    </head>
    <body>
        <div id="app">
            <!-- 插值表达式 -->
            {{ msg }}
            {{ num }}
            <!-- 插值表达式中可以进行运算 -->
            {{ 1 + 2 + 3 * 4 }}
        </div>
    </body>
    <script src="js/vue-2.5.17.js"></script>
    <script type="text/javascript">
        var app = new Vue({
            el: "#app",
            // data: 数据
            // 为挂载点内部的vue变量提供值
            data: {
                msg: "hello world!",
                num: 88888
            }
    
        })
    </script>
    <script type="text/javascript">
        // 普通js代码块
        // 获取msg,num变量的值
    
        // 1.得到vue实例
        console.log(app);
        // 2.获取vue变量data: $data
        console.log(app.$data);
        // 3.获取目标变量值
        console.log(app.$data.msg);
    
        // 直接获取值
        console.log(app.msg);
        console.log(app.num);
    </script>
    </html>
    

    Vue-methods:

    <!DOCTYPE html>
    <html lang="zh">
    <head>
        <meta charset="UTF-8">
        <title>methods</title>
        <style type="text/css">
            .box {
                background-color: orange
            }
        </style>
    </head>
    <body>
        <div id="app">
            <!-- v-on: 指令,操作事件的 -->
            <p class="box" v-on:click="abcClick">{{ abc }}</p>
            <p class="box" v-on:click="defClick">{{ def }}</p>
            <p class="box" v-on:mouseover="action">88888</p>
        </div>
    </body>
    <script src="js/vue-2.5.17.js"></script>
    <script type="text/javascript">
        new Vue({
            el: '#app',
            data: {
                abc: "12345 上山打老虎 老虎不在家 ...",
                def: "67890 呵呵"
            },
            // methods为挂载点内部提供方法的实现体
            methods: {
                abcClick: function (ev) {
                    console.log(ev);
                    console.log("abc is clicked");
                },
                defClick (ev) {
                    console.log(ev);
                    console.log("def is clicked");
                },
                action () {
                    console.log("被悬浮");
                }
            }
        })
    </script>
    </html>
    

    Vue-computed:

    <!DOCTYPE html>
    <html lang="zh">
    <head>
        <meta charset="UTF-8">
        <title>computed</title>
    </head>
    <body>
        <div id="app">
            <div>
                <!-- v-model vue进行数据双向绑定的指令 -->
                <label for="xing">姓:</label><input type="text" name="xing" v-model="fisrt_name">
            </div>
            <div>
                <label for="ming">名:</label><input type="text" name="ming" v-model="last_name">
            </div>
            <div>
                <!-- 通过插值表达式实现 -->
                <div>姓名: {{ fisrt_name + " " + last_name }} </div>
                <!-- 通过computed实现 -->
                <div>姓名: {{ full_name }} </div>
                <!-- 通过methods实现 -->
                <div>姓名: {{ full_name_bac() }} </div>
            </div>
        </div>
    </body>
    <script src="js/vue-2.5.17.js"></script>
    <script type="text/javascript">
        new Vue({
            el: "#app",
            data: {
                fisrt_name: "",
                last_name: "",
                // full_name: ""
            },
            // 一个变量依赖于多个变量
            // 采用computed
            computed: {
                full_name: function () {
                    // full_name对fisrt_name及last_name两个变量进行监听,两个值只有有一个变化,full_name就会随之变化,并且可以实时渲染到页面
                    return this.fisrt_name + " " + this.last_name;
                }
            },
            methods: {
                full_name_bac: function () {
                    return this.fisrt_name + " " + this.last_name;
                }
            }
        })
    </script>
    </html>
    

    Vue-watch:

    <!DOCTYPE html>
    <html lang="zh">
    <head>
        <meta charset="UTF-8">
        <title>watch</title>
    </head>
    <body>
        <div id="app">
            <div>
                <label>姓名:</label>
                <input type="text" v-model="full_name">
            </div>
            <p>姓: {{ first_name }} </p>
            <p>名: {{ last_name }} </p>
        </div>
    </body>
    <script src="js/vue-2.5.17.js"></script>
    <script type="text/javascript">
        // 多个变量依赖于一个变量, 对该变量进行监听
        new Vue({
            el: "#app",
            data: {
                full_name: "",
                first_name: "",
                last_name: ""
            },
            // 监听full_name变量,通过full_name具体修改first_name,last_name
            watch: {
                full_name () {
                    var fullName = this.full_name;
                    console.log(fullName);
                    this.first_name = fullName.split(" ")[0];
                    this.last_name = fullName.split(" ")[1];
                }
            }
        })
    </script>
    </html>
    

    Vue-delimiters

    <!DOCTYPE html>
    <html lang="zh">
    <head>
        <meta charset="UTF-8">
        <title>delimiters</title>
    </head>
    <body>
        <div id="app">
            {{ msg }} ${ msg }
        </div>
    </body>
    <script src="js/vue-2.5.17.js"></script>
    <script type="text/javascript">
        new Vue({
            el: '#app',
            data: {
                msg: 'message'
            },
            delimiters: ['${', '}']
        })
    </script>
    </html>
    

    相关文章

      网友评论

          本文标题:Vue-入门

          本文链接:https://www.haomeiwen.com/subject/bwbzkctx.html