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.插槽

  • 相关阅读:
    MaltReport2:通用文档生成引擎
    PostgreSQL 10 如何使用 PgAdmin3
    Stackoverflow 珠玑:C#封装重试指定次数的功能
    C# 6 元组应用 Part 2:C# 也玩模式匹配
    C# 6 元组应用 Part 1:方便的字典工厂方法
    Stackoverflow 珠玑:用于分组的 LINQ 扩展方法
    Linux 下的 PostgreSQL 数据库+文件通用自动备份脚本
    让 Odoo POS 支持廉价小票打印机
    NopCommerce 根据手机浏览器和桌面浏览器切换 Theme
    为什么 C# 比 C++ 编译快那么多
  • 原文地址:https://www.cnblogs.com/yb635238477/p/9622368.html
Copyright © 2011-2022 走看看