vue2.0基础(四、实例和内置组件)

2020-08-19  本文已影响0人  zZ_d205

一、Vue和Jquery.js一起使用

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Vue和Jquery.js一起使用</title>
    <script src="../assets/js/vue.js"></script>
    <script src="../assets/js/vue.js"></script>
    <script src="../assets/js/jquery.js"></script>
</head>
<body>
    <h1>Vue和Jquery.js一起使用</h1>
    <hr>
    <div id="app">{{message}}</div>
    <script>
        var app= new Vue({
            el:'#app',
            data:{
                message:"hello world"
            },
            mounted:function(){
                $("#app").html("1111")
            },
            methods:{
                add:function(){
                    console.log("app内部方法")
                }
            }
        })
        app.add()
    </script>
</body>
</html>

二、实例方法

$mount方法是用来挂载我们的扩展的,我们先来复习一下扩展的写法。

用$destroy()进行卸载。

vm.$forceUpdate()

当Vue构造器里的data值被修改完成后会调用这个方法,也相当于一个钩子函数吧,和构造器里的updated生命周期很像。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>实例方法</title>
    <script src="../assets/js/vue.js"></script>
</head>
<body>
    <h1>实例方法</h1>
    <hr>
    <div id="app">

    </div>
    <p><button onclick="destroy()">卸载</button></p>
    <p><button onclick="reload()">刷新</button></p>
    <p><button onclick="tick()">更改数据</button></p>
    <script>

        var jspang=Vue.extend({
            template:"<p>{{message}}</p>",
            data:function(){
                return {
                    message:"hello,i am jspang"
                }
            },
            mounted:function(){
                console.log("创建")
            },
            // 销毁
            destroyed:function(){
                console.log("销毁")
            },
            // 更新
            updated:function(){
                console.log("更新")
            }
        })

        

        var vm =new jspang().$mount("#app")
        function destroy(){
          vm.$destroy();
        }

        function reload(){
            vm.$forceUpdate()
        }

        function tick(){
            vm.message="update message info ";
            vm.$nextTick(function(){
                console.log('message更新完后我被调用了');
            })
        }
    </script>
</body>
</html>

三、实例事件

一、$on 在构造器外部添加事件。

app.$on('reduce',function(){
    console.log('执行了reduce()');
    this.num--;
});

$on接收两个参数,第一个参数是调用时的事件名称,第二个参数是一个匿名方法。

如果按钮在作用域外部,可以利用$emit来执行。

//外部调用内部事件
function reduce(){
    app.$emit('reduce');
}

二、$once执行一次的事件

app.$once('reduceOnce',function(){
    console.log('只执行一次的方法');
    this.num--;

});

三、$off关闭事件

//关闭事件
function off(){
   app.$off('reduce');
}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>实例事件</title>
    <script src="../assets/js/vue.js"></script>
</head>
<body>
    <h1>实例事件</h1>
    <hr>
    <div id="app">
        {{num}}
        <p><button @click="add()">add</button></p>
       

    </div>
    <p><button onclick="reduce()">reduce</button></p>
    <p><button onclick="reduceOnce()">reduceOnce</button></p>
    <p><button onclick="off()">off</button></p>
    <script>

       var app= new Vue({
            el: '#app',
            data: {
                num: 1,

            },
            methods: {
                add() {
                    console.log('原生方法')
                    this.num++;
                }
            },
        })

        app.$on("reduce",function(){
            console.log('执行了方法')
            this.num--;
        })
        app.$once("reduceOnce",function(){
            console.log('只执行一次的方法')
            this.num--;
        })
        function reduce(){
            app.$emit("reduce")
        }
        function reduceOnce(){
            app.$emit("reduceOnce")
        }
       //关闭事件
        function off(){
           app.$off('reduce');
        }
    </script>
</body>
</html>

四、内置组件 -slot

slot是标签的内容扩展,也就是说你用slot就可以在自定义组件时传递给组件内容,组件接收内容并输出。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>slot</title>
    <script src="../assets/js/vue.js"></script>
</head>
<body>
    <h1>slot</h1>
    <hr>
    <div id="app">
        
        <jspang>
            <span slot="bolgUrl">{{jspangData.bolgUrl}}</span>
            <span slot="netName">{{jspangData.netName}}</span>
            <span slot="skill">{{jspangData.skill}}</span>
        </jspang>
    </div>


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

    <script>
        var jspang={
            template:"#tmp"
        }

       var app= new Vue({
            el: '#app',
            data:{
                jspangData:{
                    bolgUrl:'http://jspang.com',
                    netName:'技术胖',
                    skill:'Web前端'
                }
            },
            components:{
                "jspang":jspang
            },
        
        })


    </script>
</body>
</html>
上一篇下一篇

猜你喜欢

热点阅读