美文网首页
Vue快速入门(二)《快乐Vue》

Vue快速入门(二)《快乐Vue》

作者: Negen | 来源:发表于2019-02-22 16:52 被阅读0次

    基础特性

    实例及选项

    使用 Vue 前必须先实例化,即 new Vue({})
    一个 Vue 实例相当于MVVM模式中的ViewModel
    在实例化的时候我们可以传入选项对象,该对象可以包含挂载元素(el)、数据(data)、模板(template)、方法(methods)、生命周期钩子等选项,下面一一介绍。

    模板

    作用:将 HTML 从 js 中分离出来
    el:字符串类型,为实例提供挂载的元素
    template:字符串类型,默认会将template的值替换到挂载的元素,并合并挂载元素和模板节点的属性(如果属性具有唯一性,则以模板节点的为准)。
    Vue.js 2.0 中废除了 replace 这个参数,并且强制要求每一个 Vue.js 实例需要有一个根元素。
    实例代码 template.html:

    <!DOCTYPE html>
    <html>
    <head>
        <title>template</title>
        <meta charset="utf-8">
        <!-- 引入vue.js -->
        <script src="https://unpkg.com/vue/dist/vue.js"></script>
    </head>
    <body>
    <div id="app">
        <p>我是将要被template替换的内容</p>
    </div>
    
    <!--定义模板(template)-->
    <script id="tp" type="x-template">
        <div id="tpDiv">
            <h2>我是template替换后的内容</h2>
        </div>
    </script>
    
    <script type="text/javascript">
        new Vue({
            el: "#app",
            template: "#tp"
        })
    </script>
    
    </body>
    </html>
    

    运行结果如下:

    运行结果.png
    运行后的 HTML 结构为:
    运行后的HTML结构.png
    可见原内容已经被template替换掉了,试想一下如果用原生js应该怎么实现。
    数据

    Vue.js 实例中可以通过 data 属性定义数据,这些数据可以在实例对应的模板中进行绑定并使用。
    Vue 实例会代理起 data 对象里的所有属性,而不会对传入的对象进行深拷贝。另外,我们也可以引用 Vue 实例 vm 中的 $data 来获取声明的数据.
    示例:

    <!DOCTYPE html>
    <html>
    <head>
        <title>template</title>
        <meta charset="utf-8">
        <!-- 引入vue.js -->
        <script src="https://unpkg.com/vue/dist/vue.js"></script>
    </head>
    <body>
    
    <script type="text/javascript">
        var data = {name: "zhangsan"}    //定义数据对象data
        //创建一个Vue实例
        var vm = new Vue({
            data: data
        })
        alert(vm.$data === data)         //true
        console.log(vm.$data === data)   //true
        vm.name === "zhangsan"           //true
        vm.name = "lisi"                 
        alert(data.name)                 //lisi
    
        data.name = "wangwu"
        alert(vm.name)                   //wangwu
    
    </script>
    
    </body>
    </html>
    

    在模板文件中使用插值符号{{name}}可以在页面输出相应的值,而且在修改了name的值后,页面上的值也会随之改变。
    示例:

    <!DOCTYPE html>
    <html>
    <head>
        <title>template</title>
        <meta charset="utf-8">
        <!-- 引入vue.js -->
        <script src="https://unpkg.com/vue/dist/vue.js"></script>
    </head>
    <body>
        <div id="app">
            <h1>{{name}}</h1>
        </div>
    <script type="text/javascript">
        var data = {name: "zhangsan"}    //定义数据对象data
        //创建一个Vue实例
        var vm = new Vue({
            el: "#app",           //通过id绑定模板
            data: data
        })
        vm.name = "lisi"                 
        alert(data.name)                 //lisi
    
        data.name = "wangwu"
        alert(vm.name)                   //wangwu
    </script>
    </body>
    </html>
    
    方法

    通过 Vue 实例的methods属性来定义方法,并通过v-on或@来监听DOM事件(绑定事件)
    示例:

    <!DOCTYPE html>
    <html>
    <head>
        <title>template</title>
        <meta charset="utf-8">
        <!-- 引入vue.js -->
        <script src="https://unpkg.com/vue/dist/vue.js"></script>
    </head>
    <body>
        <div id="app" style="text-align:center">
            <h1>点击了{{count}}次</h1>
        <!-- v-on:click 绑定点击事件 -->
            <input type="button" name="" v-on:click="clickHandle" value="click me (v-on:click)">
        <!-- @click 绑定点击事件 -->
        <input type="button" name="" @click="clickHandle" value="click me (@click)">
    
        </div>
    <script type="text/javascript">
        var data = {count: 0}    //定义数据对象data
        //创建一个Vue实例
        var vm = new Vue({
            el: "#app",
            data: data,
            methods: {
          //定义点击处理事件clickHandle
                clickHandle: function(){
                    return this.count += 1
                }
            }
        })
    
    </script>
    </body>
    </html>
    
    生命周期

    引用下官网的图

    生命周期.png
    Vue.js 实例在创建时有一系列的初始化步骤,例如建立数据观察,编译模板,创建数据绑定等。在此过程中,我们可以通过一些定义好的生命周期钩子函数(vue自生定义好的一些方法,并且在vue的生命周期中会自动执行)来运行业务逻辑。例如:
    <!DOCTYPE html>
    <html>
    <head>
        <title>template</title>
        <meta charset="utf-8">
        <!-- 引入vue.js -->
        <script src="https://unpkg.com/vue/dist/vue.js"></script>
    </head>
    <body>
        <div id="app" style="text-align:center">
            <h1>created===========>{{message}}</h1>
        </div>
    <script type="text/javascript">
        var data = {message: ""}    //定义数据对象data
        //创建一个Vue实例
        var vm = new Vue({
            el: "#app",
            data: data,
            created: function(){
                this.message = "调用了生命周期钩子created"
            }
        })
    
    </script>
    </body>
    </html>
    

    浏览器打开该页面可以看见,页面显示 created===========>调用了生命周期钩子created
    说明vue自动执行了created,下面看看都有哪些钩子以及对应的作用吧。

    init:vue实例初始化时开始调用,此时的数据、事件等都还没有初始化,2.0 中改名为beforeCreate。

    created:实例创建之后调用。当前已经完成数据绑定、和事件方法。但是还没有挂载到DOM中。

    beforeCompile: 在 DOM 编译前调用。2.0 废弃了该方法,推荐使用 created。

    beforeMount: 2.0 新增的生命周期钩子,在 mounted 之前运行。

    compiled: 在编译结束时调用。此时所有指令已生效,数据变化已能触发 DOM 更新,但不保证 $el 已插入文档。2.0 中更名为 mounted

    ready :在编译结束和 el 第一次插入文档之后调用。2.0 废弃了该方法,推荐使用 mounted。这个变化其实已经改变了ready这个生命周期状态,相当于取消了在el首次插入文档后的钩子函数。

    beforeDestroy: 在开始销毁实例时调用,此刻实例仍然有效。

    destroyed: 在实例被销毁之后调用。此时所有绑定和实例指令都已经解绑,子实例也被销毁。

    beforeUpdate: 2.0 新增的生命周期钩子,在实例挂载之后,再次更新实例(例如更新data)时会调用该方法,此时尚未更新 DOM 结构

    updated:2.0 新增的生命周期钩子,在实例挂载之后,再次更新实例并更新完 DOM 结构后调用

    activated :2.0 新增的生命周期钩子,需要配合动态组件 keep-live 属性使用。在动态组件初始化渲染的过程中调用该方法。

    deactivated :2.0 新增的生命周期钩子,需要配合动态组件 keep-live 属性使用。在动态组件移出的过程中调用该方法。

    举个例子,看下各自执行的顺序

    <!DOCTYPE html>
    <html>
    <head>
        <title>vue生命周期</title>
        <meta charset="utf-8">
        <!-- 引入vue.js -->
        <script src="https://unpkg.com/vue/dist/vue.js"></script>
    </head>
    <div id="app" style="text-align: center;">
        <h2>{{count}}</h2>
        <input type="button" name="" value="update count" @click="clickHandle">
    </div>
    
    <body>
    <script type="text/javascript">
        var data = {count : 0};
        //创建一个Vue实例
        var vm = new Vue({
            el: "#app",
            data: data,
            methods:{
                clickHandle: function(){
                        if(this.count == 2){
                            vm.$destroy()
                            alert("Vue destroyed")
                        }
                    return this.count += 1
                }
            },
            beforeDestroy: () => console.log("执行了====>beforeDestroy"),
            created: () => console.log("执行了====>created"),
            beforeCreate: () => console.log("执行了====>beforeCreate"),
            mounted: () => {
                console.log("执行了====>mounted")
                //this.$destroy()
            },
            destroyed: () => console.log("执行了====>destroyed"),
            beforeUpdate: () => console.log("执行了====>beforeUpdate"),
            updated: () => console.log("执行了====>updated"),
            activated: () => console.log("执行了====>activated"),
            deactivated: () => console.log("执行了====>deactivated")
        })
    
    </script>
    </body>
    </html>
    

    点击按钮三次控制台打印出如下结果:

    生命周期实例运行结果.png

    相关文章

      网友评论

          本文标题:Vue快速入门(二)《快乐Vue》

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