美文网首页前端之美-VueJs
Vue中的组件(全)

Vue中的组件(全)

作者: Cherish丶任 | 来源:发表于2018-09-20 16:37 被阅读165次

Vue常用的三种传值方式有:
父传子 用属性传
子传父 用事件传
非父子传值 第三方量
组件(component):是Vue最轻大的功能之一。 组件化开发
特点:组件可以扩展HTML元素,封装可重用代码。
组件在命名是不可以使用HTML中的元素
组件分为全局与局部:
全局注册为

<div id="itany">
<组件名></组件名>//组件名不能用HTML元素

</div>
Vue.component('组件名',{
  template:`<p>这是组件的全局注册</p>`
})
new Vue({
  el:'#itany'
})

局部注册为:

<div id="itany">
<组件名></组件名>
</div>
    new Vue({
        el:'#itany',
        components:{
            '组件名':{
                template:`<p>1581</p>`
            }
        }
    })

组件中可以写多个Vue.component
例如:

<div id="app">
<my-itany></my-itany>
</div>
<script src="js/vue.js"></script>
<script>
    Vue.component('my-itany',{
        template:`
        <div>
            <p>第一行</p>
            <you-itany v-bind:message="mas"></you-itany>
        </div>
        `,
        data:function(){
            return{
                mas:'asfg'
            }
        }
    })
    Vue.component('you-itany',{
        props:['message'],
        template:`
        <div>
            <p>{{message}}</p>
        </div>
        `
    })
    new Vue({
        el:'#app'
    })
</script>

注意:在组件中data选项必须是一个函数且有返回值
组件中可以正常使用vue中的指令
例如:

<div id="itany">
<n-component></n-component>
</div>
<script src="js/vue.js"></script>
<script>
    Vue.component('n-component',{
        template:`
        <div>
            <p>{{message}}</p>
            <button v-on:click="add">按钮</button>
        </div>
        `,
        data:function(){
            return{
                message:'dcgf'
            }
        },
        methods:{
            add:function(){
                alert(11111)
            }
        }
    })
    new Vue({
        el:'#itany'
    })
</script>
组件props

选项props是父子组件间的桥梁
props格式为:props:[' 自定义属性'],
例如:

<div id="app">
<my-mother></my-mother>
</div>
<script src="js/vue.js"></script>
<script>
    Vue.component('my-mother',{
        template:`
            <div>
                <my-tit v-bind:tit="title"></my-tit>
            </div>
        `,
        data:function(){
            return{
                arr:['banana','apple','orange'],
                title:'水果贩卖'
            }
        }
    })
    Vue.component('my-tit',{
        props:['tit'],
        template:`
            <p>{{tit}}</p>
        `
    })

//输出结果为:水果贩卖
子传父用事件传($emit)

this.$emit('自定义事件',参数)。

子组件中需要以某种方式例如点击事件的方法来触发一个自定义事件
将需要传的值作为$emit的第二个参数,该值将作为实参传给响应自定义事件的方法
在父组件中注册子组件并在子组件标签上绑定对自定义事件

举个最基本的例子:

<div id="itany">
    <my-father></my-father>
</div>
<script src="js/vue.js"></script>
<script>
    Vue.component('my-father',{
        template:`
            <div>
                <p>{{message}}</p>
                <my-son @send="jieSend"></my-son>
            </div>
        `,
        data:function(){
          return{
              message:''
          }
        },
        methods:{
          jieSend:function(text){
              this.message=text
          }
        }
    })
    Vue.component('my-son',{
        template:`
            <button @click="send">传递</button>
        `,
        data:function(){
            return{
                msg:'Who are you?'
            }
        },
        methods:{
            send:function(){
                this.$emit('send',this.msg)
            }
        }
    })
    new Vue({
        el:'#itany'
    })
</script>

输出结果为点击button出现Who are you?


Image 1.png
非父子关系(用第三方量)

非父子组件之间传值,需要定义个公共的公共实例but,作为中间仓库来传值

<div id="app">
    <father></father>
    <son></son>
</div>
<script src="js/vue.js"></script>
<script>
    //引入公共的but,来做为中间传达的工具
    var but = new Vue();
    Vue.component('father',{
        template:`
            <div>
                <h1>我是father组件</h1>
                <button @click="send">发送</button>
            </div>
        `,
        data:function(){
            return{
                mas:'who are you'
            }
        },
        methods:{
            send:function(){
                but.$emit('sends',this.mas)
            }
        }
    })
    Vue.component('son',{
        template:`
            <div>
                <h1>我是son组件</h1>
                <a href="">{{mass}}</a>
            </div>
        `,
        data:function(){
            return{
                mass:''
            }
        },
        mounted:function(){
            but.$on('sends',mas=>{//箭头函数的this指向不同,文章最后有‘this指向详细解析的网页’
                this.mass=mas
            })
        }

    })

    new Vue({
        el:'#app'
    })
</script>

箭头函数this指向详细解析:https://www.cnblogs.com/dongcanliang/p/7054176.html(如有需要请跳转网页观看)

相关文章

  • Vue中的组件(全)

    Vue常用的三种传值方式有:父传子 用属性传子传父 用事件传非父子传值 第三方量组件(compon...

  • Vue.js的组件化思想 —上

    一、Vue中的组件 Vue视图层的灵魂 — 组件化 组件(Component)是 Vue.js 最强大的功能之一...

  • vue 的坑

    记录vue中遇到的坑(不管是组件ele组件还是vue本身)Element 组件中的bug 寻找地址:https:/...

  • vue学习

    vue核心是组件,组件是vue实例,没有el,其他data,computed等等方法都有。组件定义在vue中,用在...

  • vue中的slot插槽的用法

    App.vue作为b.vue的父组件引用子组件 b.vue中的写法

  • Vite按需引入自定义组件unplugin-vue-compon

    unplugin-vue-components插件可以在Vue文件中自动引入组件(包括项目自身的组件和各种组件库中...

  • Vue中多个元素或组件的过渡

    Vue中多个元素的过渡 Vue中多个组件的过渡(通过动态组件实现组件的过渡动画效果)image.png

  • vue父子组件传递数据方法

    标签(空格分隔): vue 父组件向子组件传递数据 Vue中父组件向子组件传递数据用props 举个例子 父组件中...

  • 组件的局部注册

    组件和组件名 在Vue实例中通过Vue.component({/.../})绑定的组件都自动成为全局组件,不管这个...

  • vue父子组件间调用方法

    标签(空格分隔): vue 子组件中 父组件中

网友评论

    本文标题:Vue中的组件(全)

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