VUE.js快速入门(vue本地应用⑤)

2021-02-13 16:15

阅读:418

标签:mount   组件   put   component   方法   监听   ati   info   message   

Vue中兄弟组件的通讯

1.空实例与自定义事件

$emit

$on

2.Vuex状态管理

state

mutation

commit

 

空实例与自定义事件:

DOCTYPE html>
html lang="en">
head>
    meta charset="UTF-8">
    meta name="viewport" content="width=device-width, initial-scale=1.0">
    title>Documenttitle>
head>
body>
    div id="app">
        my-head>my-head>
        my-list>my-list>
    div>
    script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js">script>
    script>
        //空实例
        var vmContext=new Vue();
        var vm=new Vue({
            el:"#app",
            components:{
                "my-head":{
                    template:`h1>{{message}}/h1>`,
                    data:function(){
                        return{
                            message:"this is my-head"
                        }
                    },
                    mounted:function(){
                        vmContext.$on("outgetContext",function(s){
                            this.message=s;
                        }.bind(this));
                    }
                },
                "my-list":{
                    template:`ul>
                                li v-for="item in items" @click="getContext">
                                    {{item}}
                                /li>
                             /ul>`,
                    data:function(){
                        return{
                            items:["第一","第二","第三"]
                        };
                    },
                    methods:{
                        getContext:function(s){
                            vmContext.$emit("outgetContext",s.target.innerHTML);
                            console.log(s)
                        }
                    
                    }
                }
            },

        })
    script>
body>
html>

技术图片

 

 这两个组件都是内部组件

从my-list分析template模板里使用的是`写的

data里是数组元素,methods里function参数s指的是

  • 里的内容,使用$emit将数据传出去。

    技术图片

     

     在外面定义了一个新的vue实例目的就是间接的接受$emit传出的方法和返回值。

    上面的组件前面都一样,在mounted后,就是挂载后methods里监听事件$on

    将function里的参数指定到message上,这里this本来绑定的事function(s)需要修正使用bind到外面的组件中。

     这种就是比较麻烦的方式。

     

    vuex:状态管理

    DOCTYPE html>
    html lang="en">
    head>
        meta charset="UTF-8">
        meta name="viewport" content="width=device-width, initial-scale=1.0">
        title>Documenttitle>
    head>
    body>
        div id="app">
            div>{{count}}div>
            br/>
            add-button>add-button>
            remove-button>remove-button>
        div>
        script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js">script>
        script src="https://unpkg.com/vuex@3.4.0/dist/vuex.js">script>
        script>
            //vuex实例化
            var store=new Vuex.Store({
                state:{
                    count:0
                },
                mutations:{
                    add:function(state){
                        state.count++;
                    },
                    remove:function(state){
                        state.count--;
                    }
                }
            });
    
            //vue实例化
            var vm=new Vue({
                el:"#app",
                computed:{
                    count:function(){
                        return store.state.count;
                    }
                },
                components:{
                    "add-button":{
                        template:`input type="button" value="+" @click="add"/>`,
                        methods:{
                            add:function(){
                                store.commit("add");
                            }
                        }
    
                    },
                    "remove-button":{
                        template:`input type="button" value="-" @click="remove"/>`,
                        methods:{
                            remove:function(){
                                store.commit("remove");
                            }
                    }
                }
                }
            });
        script>
    body>
    html>

    技术图片

     

    这里就相当将这些提出来了,如果只用一遍就可以写里面,但是以复用形式来看这样写更好

    分析:首先先引入vuexscript src="https://unpkg.com/vuex@3.4.0/dist/vuex.js">script>

  • 之后实例化vuex这里的Store是大写,state里写参数,mutation里写方法

    之后写vue的实例el挂载id=app,computed是计算属性给count赋值,最后在组件的funtion里添加commit。

     

    VUE.js快速入门(vue本地应用⑤)

    标签:mount   组件   put   component   方法   监听   ati   info   message   

    原文地址:https://www.cnblogs.com/liuyang95/p/13020038.html


    评论


    亲,登录后才可以留言!