首页 > Web开发 > 详细

vue.js_08_vue-组件的定义

时间:2019-10-19 16:30:06      阅读:53      评论:0      收藏:0      [点我收藏+]

1.vue组件常用定义方式

<body>
        <div id="app">
            <!--1.3使用组件-->
            <mycom1></mycom1>
            <mycom2></mycom2>
            <mycom3></mycom3>
        </div>
        <template id="mycom3">
            //只能有一个 根元素
            <div>
                <h3>这是使用Vue 创建的模板组件</h3>
            </div>
        </template>
        <script>
            Vue.component(mycom1, {
                //只能有一个 根元素
                template: <div><h3>这是使用Vue 创建的全局组件</h3></div>
            })
            var vm = new Vue({
                el: #app,
                data: {},
                methods: {},
                components: {
                    mycom2: {
                        //只能有一个 根元素
                        template: <div><h3>这是使用Vue 创建的私有组件</h3></div>
                    },
                    mycom3: {
                        template: #mycom3
                    }
                }
            })
        </script>
    </body>

 技术分享图片

2.组件中的data和methods

<div id="app">
            <count></count>
            <hr />
            <count></count>
            <hr />
            <count></count>
        </div>
        <template id="tpl1">
            <div>
                <input type="button" value="+1" @click="incrment" />
                <h3>{{count}}</h3>
            </div>
        </template>

        <script>
            Vue.component(count, {
                template: #tpl1,
                data: function() {
                    return {
                        count: 0
                    }
                },
                methods: {
                    incrment() {
                        this.count++
                    }
                },
            });
            var vm = new Vue({
                el: #app,
                data: {},
                methods: {},
            });
        </script>
    </body>

技术分享图片

 3.vue组件之间的切换

<body>
        <div id="app">
            <a href="" @click.prevent="comName=‘login‘">登陆</a>
            <a href=""  @click.prevent="comName=‘register‘">注册</a>
            <!-- component是一个占位符 :is 属性,可以用来指定要展示的组件的名称 -->
            <component :is="comName"></component>
        </div>
        <script>
            Vue.component(login,{
                template:<h3>登陆组件<h3>
            });
            Vue.component(register,{
                template:<h3>注册组件<h3>
            });
            
            var vm = new Vue({
                el: #app, 
                data: {
                    comName:login,
                },
                methods:{}
            })
        </script>
    </body>

4.vue父子组件之间对象的传递

  1>通过 属性绑定(v-bind:)的形式将对象传递给子组件

  <com1 v-bind:parentmsg="msg"></com1>

  将父组件中data中的msg属性传递给子组件

  子组件必须用 props: [parentmsg],来接收

<body>
    <div id="app">
        <!-- 父组件 通过 属性绑定(v-bind:)的形式,把需要传递给子组件,以属性绑定的形式,传递到子组件内部,供子组件使用 -->
        <com1 v-bind:parentmsg="msg"></com1>
    </div>
    <script>
        var vm = new Vue({
            el: #app,
            data: {
                msg: 123,这是父组件中的数据
            },
            methods: {},
            
            components: {
                com1: {
                    data() {
                        //组件中的data数据都是,组件私有的,比如:子组件动过ajax,请求回来的数据,都可以放到data上。是可读可写的
                        return {
                            title: 123,
                            content: qqq
                        }
                    },
                    //默认子组件是无法访问父组件中的data和methods
                    template: <h1>这是子组件----{{parentmsg}}</h1>,
                    // 把父组件传递过来的 parentmsg属性接受 
                    //props这个数据是只读的
                    props: [parentmsg],
                }
            }
        })
    </script>
</body>

 

5.vue父子组件之间的方法的传递

  1>父组件向子组件传递方法 用的是事件绑定 v-on:

    <com1 @func="show"></com1>

   //当点击子组件的按钮的时候,如何拿到 父组件传递过来的额func方法
    //调用父组件 @func绑定的方法 并传递参数
    this.$emit(func, this.son)
<body>
    <div id="app">
        <!-- 父组件向子组件传递方法 用的是事件绑定 v-on: -->
        <com1 @func="show"></com1>
    </div>

    <template id="tmpl">
        <div>
            <h1>这是子组件</h1>
            <input type="button" value="这是子组件中的按钮-点击它触发父组件传递过来的fun方法" @click="myclick">
        </div>
    </template>
    <script>
        var vm = new Vue({
            el: #app,
            data: {
                datason:null
            },
            methods: {
                show(data) {
                    console.log(调用了父组件身上的show方法-- + data),
                    this.datason=data
                },

            },
            components: {
                com1: {
                    template: #tmpl,
                    data() {
                        return {
                            son: { name: 大头儿子, age: 5 }
                        }
                    },
                    methods: {
                        myclick() {
                            //当点击子组件的按钮的时候,如何拿到 父组件传递过来的额func方法
                            //调用父组件 @func绑定的方法 并传递参数
                            this.$emit(func, this.son)
                        }
                    }
                },

            }
        })
    </script>
</body>

技术分享图片

6.veu中DOM元素的获取

<h3 id="h3" ref="myh3">哈哈哈,今天天气太好了!!!</h3>
设置要获取的dom元素的ref
console.log(this.$refs.myh3.innerHTML)
<body>
        <div id="app">
            <h3 id="h3" ref="myh3">哈哈哈,今天天气太好了!!!</h3>
            <input type="button" value="获取元素" @click="getElement" />
            <com1 id="com1"  ref="com1"></com1>
        </div>
        <script>
            Vue.component(com1,{
                template:<h3>我是com1组件</h3>,
                data(){
                    return {
                        msg:msg
                    }
                }
            })
            var vm = new Vue({
                el: #app, 
                data: {},
                methods:{
                    getElement(){
                        //$refs获取DOM元素
                        console.log(this.$refs.myh3.innerHTML)
                        console.log(this.$refs.com1.msg)
                    }
                }
            })
        </script>
    </body>

 


vue.js_08_vue-组件的定义

原文:https://www.cnblogs.com/asndxj/p/11703955.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!