vue.js 2.0学习记录第四天

169 阅读3分钟

我的vue.js 2.0学习路线是参考技术胖老师的博客,感谢!

一、实例入门-实例属性

这一块可以对照官网API看一下都有哪些实例属性。

完整html代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <script type="text/javascript" src="js/vue.min.js"></script>
    <title>实例入门-实例属性</title>
</head>
<body>
<h1>实例入门-实例属性</h1>
<hr>
<div id="app">
    {{number}}
</div>

<script type="text/javascript">
    var app=new Vue({
        el:'#app',
        data:{
            number:5,
        },
    })
    console.log(app.$data)
    console.log(app.$props)
    console.log(app.$el)
    console.log(app.$options)
    console.log(app.$parent)
    console.log(app.$root)
    console.log(app.$children)
    console.log(app.$slots)
    console.log(app.$scopedSlots)
    console.log(app.$refs)
    console.log(app.$isServer)
    // 2.4.0 新增 $attrs$listeners 可去官网API查看
</script>
</body>
</html>

二、实例方法-生命周期

  1. $mount()方法

    如果 Vue 实例在实例化时没有收到 el 选项,则它处于“未挂载”状态,没有关联的 DOM 元素。可以使用 vm.$mount() 手动地挂载一个未挂载的实例。

  2. $destroy()方法

    完全销毁一个实例。清理它与其它实例的连接,解绑它的全部指令及事件监听器。

  3. $forceUpdate()方法

    迫使 Vue 实例重新渲染。注意它仅仅影响实例本身和插入插槽内容的子组件,而不是所有子组件。

  4. $nextTick()方法

    迫使 Vue 实例重新渲染。注意它仅仅影响实例本身和插入插槽内容的子组件,而不是所有子组件。

完整html代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <script type="text/javascript" src="js/vue.min.js"></script>
    <script type="text/javascript" src="js/jquery-3.3.1.min.js"></script>
    <title>实例方法-生命周期</title>
</head>
<body>
<h1>实例方法-生命周期</h1>
<hr>
<!--$mount()方法-->
<div id="kuozhan"></div>
<!--$destroy()方法-->
<button onclick="destroy()">点击卸载</button>
<!--$forceUpdate()方法-->
<button onclick="update()">点击强制更新</button>
<!--$nextTick()方法-->
<button onclick="nextTick()">点击修改数据</button>
<script type="text/javascript">
    //$mount方法用来挂载我们的扩展的
    var kuozhan=Vue.extend({
        template:`<p>{{message}}</p>`,
        data:function () {
            return{
                message:'这是一个扩展'
            }
        },
    })
    var vm=new kuozhan().$mount('#kuozhan')

    // $destroy只是完全销毁一个实例。清理它与其它实例的连接,解绑它的全部指令及事件监听器。它并不是用来清除已有页面上的DOM的。
    function destroy() {
        vm.$destroy();
    }

    // 迫使 Vue 实例重新渲染。注意它仅仅影响实例本身和插入插槽内容的子组件,而不是所有子组件。
    function update() {
        vm.$forceUpdate();
    }

    // 当Vue构造器里的data值被修改完成后会调用这个方法,也相当于一个钩子函数吧,和构造器里的updated生命周期很像。
    //如果前边使用了$destroy()卸载实例,那么该方法不起作用。请先注释掉前边的$destroy()
    function nextTick() {
        vm.message="update message info ";
        vm.$nextTick(function(){
            console.log('message更新完后我被调用了');
        })
    }

</script>
</body>
</html>

三、实例方法-事件

  1. $on()方法

    监听当前实例上的自定义事件。事件可以由vm.$emit触发。回调函数会接收所有传入事件触发函数的额外参数。

  2. $once()方法

    监听一个自定义事件,但是只触发一次,在第一次触发之后移除监听器。

  3. $off()方法

    移除自定义事件监听器。

  4. $emit()方法

    触发当前实例上的事件。附加参数都会传给监听器回调。

完整html代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <script type="text/javascript" src="js/vue.min.js"></script>
    <script type="text/javascript" src="js/jquery-3.3.1.min.js"></script>
    <title>实例方法-事件</title>
</head>
<body>
<h1>实例方法-事件</h1>
<hr>
<div id="app">
    {{number}}<br>
    <button @click="add()">点击加1</button>
</div>
<button onclick="reduce()">点击减1</button><br>
<button onclick="reduceOnce()">点击减1(只执行一次)</button><br>
<button onclick="off()">点击移除减1事件</button><br>
<script type="text/javascript">
    var app=new Vue({
        el:'#app',
        data:{
            number:1
        },
        methods:{
            add:function () {
                    this.number++;
            },
        }
    });
    //$on()方法在构造器外部添加事件
    app.$on('reduce',function(){
        this.number--;
    })
    //$once()方法在构造器外部添加执行一次的事件
    app.$once('reduceOnce',function(){
        this.number--;
    });

    //外部调用内部事件
    function reduce() {
        app.$emit('reduce')//$emit()方法,触发当前实例上的事件
    }
    function reduceOnce() {
        app.$emit('reduceOnce')
    }
    function off() {
        app.$off('reduce')//$off()方法,移除自定义事件监听器。点击之后减1按钮不再起作用
    }
</script>
</body>
</html>

四、内置组件slot

看一下这篇文章大白话vue——slot的作用与使用,了解一下slot的简单用法。

看一下这篇文章vue中的插槽————slot,了解一下slot的用法和具名插槽。

完整html代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <script type="text/javascript" src="js/vue.min.js"></script>
    <title>Slot content extend Demo</title>
</head>
<body>
<h1>Slot content extend Demo</h1>
<hr>
<div id="app">
    <messages>
        <span slot="netName">{{message.netName}}</span>
        <span slot="skill">{{message.skill}}</span>
    </messages>
</div>


<template id="tmp">
    <div>
        <p>网名:<slot name="netName"></slot></p>
        <p>技术类型:<slot name="skill"></slot></p>

    </div>
</template>

<script type="text/javascript">
    var messages={
        template:'#tmp'
    }

    var app=new Vue({
        el:'#app',
        data:{
            message:{
                netName:'vue',
                skill:'Web前端'
            }
        },
        components:{
            "messages":messages
        }
    })
</script>
</body>
</html>

今天还学习了vue-cli和vue-router,给大家网址自己学习一下吧。

vue-cli

vue-router

vue-x

拜拜~