zoukankan      html  css  js  c++  java
  • vue中的组件

    1.全局组件

    -- 全局注册
            -- Vue.component("组件名称",{
                template:`<div></div> `,必须用一个盒子包起来
                data(){
                    return{
                        name: "翁振西"
                    }
                },
                methods: {
                    方法。。。
                }
            })

    2.局部注册

    局部注册
            -- 把我们的组件注册到Vue实例对象里
            --const app = new Vue({
                        el: "#app",
                        components: {
                            qianqianqian: qianqian
                        }
                    })

    也可以这样写:

    3.子组件的注册

     子组件的注册
            -- 在父组件里注册子组件
            -- 在父组件的template里写子组件的标签
                let juteng = {
                    template: `<div>
                                    <h1>鞠腾</h1>
                                    <juma></juma>
                                </div>`,
                    components: {
                        juma: juma
                    }
                };

    4.父子通信(父亲对儿子的通信):props用来接收父组件传来的方法。

    5.子父通信:

     6.   7.   demo(子父通信)

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <script src="https://cdn.bootcss.com/vue/2.5.17-beta.0/vue.js"></script>
    </head>
    <body>
    <div id="app">
        <yangbo></yangbo>
    </div>
    <script>
        let bobo = {
            template:`<div>
                        <h2>伯伯</h2>
                        <button @click="my_click">点我发消息</button>
                        </div>`,
            methods:{
                my_click:function () {
                    this.$emit('son_say','啊实打实实打实')  //监听事件
                }
            }
        }
        let yangbo = {
            template:`<div>
                        <h1>杨波</h1>
                        <bobo @son_say="h_say"></bobo>
                        <p>儿子胡说:{{say}}</p>
                        </div>`,
            components:{
                bobo:bobo
            },
            data(){
                return {
                    say:''
                }
            },
            methods:{
                h_say:function (data) {
                    this.say =data
                }
            }
        }
        const app = new Vue({
            el:'#app',
            components:{
                yangbo:yangbo
            }
        })
    </script>
    </body>
    </html>

    8.非父子组件通信:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <script src="https://cdn.bootcss.com/vue/2.5.17-beta.0/vue.js"></script>
    </head>
    <body>
    <div id="app">
        <yangbo></yangbo>
        <bobo></bobo>
    </div>
    <script>
        let ning = new Vue();
        let yangbo = {
            template:`<div>
                        <h2>杨波</h2>
                        <button @click="my_click">点我发信息</button>
                        </div>`,
            methods:{
                my_click:function () {
                    ning.$emit('yangbo_say','实打实打算') //emit提交事件
                }
            }
        };
        let bobo = {
            template:`<div>
                        <h3>伯伯</h3>
                        <p>杨波跟我说:{{say}}</p>
                        </div>`,
            data(){
                return {
                    say:''
                }
            },
            //钩子函数,页面加载完成之后执行的方法
            mounted(){
                let _this = this;
                ning.$on('yangbo_say',function (data) {
                    _this.say = data
                })
            }
        };
        const app = new Vue({
            el:'#app',
            components:{
                yangbo:yangbo,
                bobo:bobo
            }
        })
    </script>
    </body>
    </html>

    9.混合:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <script src="https://cdn.bootcss.com/vue/2.5.17-beta.0/vue.js"></script>
    </head>
    <body>
    <div id="app">
        <yangbo></yangbo>
        <bobo></bobo>
    
    </div>
    <script>
        let bobo = {
            template:`<div>
                        <button @mouseenter="my_show" @mouseleave="my_hide">鼠标移入显示</button>
                        <p v-show="is_show">杨波</p>
                        </div>`,
            data(){
              return {
                  is_show:false
              }
            },
            methods:{
                my_show:function () {
                    this.is_show = true
                },
                my_hide:function () {
                    this.is_show = false
                }
            }
        }
        let yangbo = {
            template:`<div>
                        <button @click="my_show">点我显示</button>
                        <button @click="my_hide">点我隐藏</button>
                        <p v-show="is_show">就这样爱你爱你爱你随时都要一起</p>
                        </div>`,
            data(){
              return {
                  is_show:false
              }
            },
            methods:{
                my_show:function () {
                    this.is_show = true
                },
                my_hide:function () {
                    this.is_show = false
                }
            }
        }
        const app = new Vue({
            el:'#app',
            components:{
                yangbo:yangbo,
                bobo:bobo
            }
        })
    </script>
    </body>
    </html>

     对于这两个事件,他们拥有一样的方法和属性,所以我们也可以把他们放在一起。利用 mixins

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <script src="https://cdn.bootcss.com/vue/2.5.17-beta.0/vue.js"></script>
    </head>
    <body>
    <div id="app">
        <yangbo></yangbo>
        <bobo></bobo>
    
    </div>
    <script>
        let ning ={
            data(){
              return {
                  is_show:false
              }
            },
            methods:{
                my_show:function () {
                    this.is_show = true
                },
                my_hide:function () {
                    this.is_show = false
                }
            }
        }
        let bobo = {
            template:`<div>
                        <button @mouseenter="my_show" @mouseleave="my_hide">鼠标移入显示</button>
                        <p v-show="is_show">杨波</p>
                        </div>`,
            mixins:[ning]
        }
        let yangbo = {
            template:`<div>
                        <button @click="my_show">点我显示</button>
                        <button @click="my_hide">点我隐藏</button>
                        <p v-show="is_show">就这样爱你爱你爱你随时都要一起</p>
                        </div>`,
            mixins:[ning]
        }
        const app = new Vue({
            el:'#app',
            components:{
                yangbo:yangbo,
                bobo:bobo
            }
        })
    </script>
    </body>
    </html>

    10.插槽

  • 相关阅读:
    HDU 3081 Marriage Match II
    HDU 4292 Food
    HDU 4322 Candy
    HDU 4183 Pahom on Water
    POJ 1966 Cable TV Network
    HDU 3605 Escape
    HDU 3338 Kakuro Extension
    HDU 3572 Task Schedule
    HDU 3998 Sequence
    Burning Midnight Oil
  • 原文地址:https://www.cnblogs.com/yb635238477/p/9622368.html
Copyright © 2011-2022 走看看