美文网首页
14Vue- 组件引入

14Vue- 组件引入

作者: 滔滔逐浪 | 来源:发表于2021-08-01 14:23 被阅读0次

    为了扩展HTML元素,封装可重用的代码
    组件的注册方式:
    a. 全局组件:
    Vue.component来创建:
    Vue.component('my-component-name',{

    })

    
    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8">
            <title></title>
        </head>
                <script src="../../lib/vue.js"></script>
                <script src="../../lib/axios.js"></script>
        <body>
            <div id="app">
                  <navbar></navbar>
                    <navbar></navbar>
                      <navbar></navbar>
                      <kerwin-tabbar></kerwin-tabbar>
            </div>
            <script>
                //template 包含一个根节点
                //组件是孤岛,无法直接访问外面的组件的状态或者方法,间接的组件通信
                //自定义的组件data 必须是一个函数
                //7 所有的组件都在一起太乱了,--vue单文件解决
                Vue.component("navbar",{
                    template:
                    `
                     <div style="background:red">
                       <button @click="handleBack()">返回</button>
                        <span>导航栏-{{myname}}</span>
                        <button @click="handleHome()">首页</button>
                          <child></child>
                    </div>`,
                    methods:{
                        handleBack(){
                            console.log("返回按钮");
                        },
                        handleHome(){
                            console.log("首页")
                        }
                    },
                    watch:{
                        
                    },
                    data(){
                        return{ myname:"chile-name"}
                    }
                
                    
                })
                
                Vue.component("kerwinTabbar",{
                    template:`
                    <div style="background:red;">
                      
                      kerwinTabbar
                      <child></child>
                      <tabbarchild></tabbarchild>
                      </div>
                    
                    `,
                    components:{
                        //局部定义
                        "tabbarchild":{
                            template:`<div>tabbarchild</div>`
                        }
                    }
                })
                //定义一个孩子节点组件
                Vue.component("child",{
                    template:`
                    <div>child</div>
                    
                    `
                    
                })
                
                new Vue({
                    el:"#app",
                    data:{
                         myname:"deefd"
                    }, 
                    methods:{
                        
                    }
                })
            </script>
        </body>
    </html>
    
    

    组件父传子:

    
    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8">
            <title></title>
            <script src="../../lib/vue.js"></script>
            <script src="../../lib/axios.js"></script>
        </head>
        <body>
            <div id="app">
                   <navbar :mymsg="msg"></navbar>
                   <navbar ></navbar>
                    <navbar ></navbar>
            </div>
    
    <script>
        Vue.component("navbar",{
            template:
            `
             <div style="background:red">
               <button v-show="myshow" >返回</button>
                <span >导航栏-{{mytitle}}--{{mymsg}}</span>
                <button  v-show="myshow">首页</button>
                  
            </div>`,
        //  props:["mytitle","myshow"]//父组件传递的属性,在这里接收
        props:{
            mytitle:{
                type:"String",
                default:"默认名字"
            },
            myshow:{
                type:Boolean,
                default:true
            },
            mymsg:{
                type:"String",
                default:"3232"
            }
            
        }
            });
        //根组件
        new Vue({
            el:"#app",
            data:{
             msg:"323232"   
                
            },
            
        });
    </script>
        </body>
    </html>
    
    
    
    

    子传父

    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8">
            <title></title>
            <script src="../../lib/vue.js"></script>
            <script src="../../lib/axios.js"></script>
        </head>
        <body>
            <div id="app">
                app
                 <child @myevent="handleEvent"></child>
            </div>
    
    <script>
        Vue.component("child",{
            template:`
            <div style="background:yellow">child
                child-<button @click="handleclick">click-child</button>
            
            </div>
            `,
            data(){
                return {
                    money:10000000
                }
            },
            methods:{
                handleclick(){
                    this.$emit("myevent",this.money)
                }
            }
        })
        
        new Vue({
            el:"#app",
            data:{
                
                 
            },
            methods:{
                handleEvent(data){
                    console.log("父组件中的定义",data);
                }
            }
            
        });
    </script>
        </body>
    </html>
    
    

    父传子是属性

    props:{
            mytitle:{
                type:"String",
                default:"默认名字"
            },
            myshow:{
                type:Boolean,
                default:true
            },
            mymsg:{
                type:"String",
                default:"3232"
            }
            
        }
    
    

    子传父是事件

        this.$emit()
    

    ref传递

    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8">
            <title></title>
            <script src="../../lib/vue.js"></script>
            <script src="../../lib/axios.js"></script>
        </head>
        <body>
            <div id="app">
                <input type="text" ref="mytext" />
                <button @click="handleadd">add</button>
                <child ref="mychild"></child>
            </div>
    
    <script>
        Vue.component("child",{
            template:`
            <div style="background: yellow">child--{{childname}}</div>
            
            `,
            data(){
                return {
                    childname:"222222222"
                }
            }
        })
        
        new Vue({
            el:"#app",
            data:{
                
                
            },
            methods:{
                handleadd(){
                    console.log(this.$refs.mychild.childname);
                    this.$refs.mychild.childname='98898';
                }
            }
            
        });
    </script>
        </body>
    </html>
    
    
    

    相关文章

      网友评论

          本文标题:14Vue- 组件引入

          本文链接:https://www.haomeiwen.com/subject/ereqvltx.html