美文网首页
VUE-组件

VUE-组件

作者: 哎呦呦胖子斌 | 来源:发表于2018-11-29 16:40 被阅读0次

组件

        组件就是为了拆分Vue实例的代码量的,能够让我们以不同的组件来划分不同的功能模块,将来我们需要什么样的功能,就可以去调用对应的组件即可。

组件化和模块化的不同

模块化:是从代码逻辑的角度进行划分的,方便代码分层开发,保证每个功能模块的职能单一;

组件化:是从UI界面的角度进行划分的,前端的组件化方便UI组件的重用。

全局组件

直接在script标签中定义,和new Vue平级,不需要再进行注册,可以直接在html标签中使用

        //全局组件
        Vue.component('todo-list',{
            template:"<li>全局组件</li>"   
  这个地方也可以写成”#tem”   然后在vue实例#app的外面书写html代码<template id=’tem’></template>
        })
<todo-list></todo-list>
局部组件

直接在script标签中定义,和new Vue平级,只是定义了一个变量,需要进行注册

        //局部组件,定义完之后要在Vue中的components注册一下
        var TodoItem = {    
            props:['content'],
            template:'<li v-on:click="clickAler">{{content}}</li>'
            methods:{
                clickAler:function(e){
                    // alert(this.content);
                    this.$emit('delete',this.index);
//子组件向外发布一个delete事件,并携带数据this.index
                }
            }

        }
        new Vue({
            el:'#root',                           //挂载点:el参数对应的dom标签
            // template:'<h1>hello {{msg}}</h1>',    //模板:挂载点内部的内容
   // 如果一个vue实例没有template,那么它就会找挂载点,并把挂载点下面的DOM当做一个模板
            components:{
              'todo-item': TodoItem
            },
            data: {                               //vue实例里面的数据
                msg:'hello ffff',
                num:123,
                list:['第一个','第二个','第三个'],
                inputValue:'',
                inputList:[]
            },
            methods:{
                commit:function(){
                    this.inputList.push(this.inputValue);
                    this.inputValue = '';
                }
            }
        })
<todo-item v-for='(item,index) in inputList' 
v-bind:key='index' v-bind:content='item'  
v-bind:index='index'
v-on:delete='deleteItem'
 ></todo-item>

        组件名称使用了驼峰命名,则在引用组件的时候需要把大写的驼峰改为小写的字母,同时两个单词之间使用‘-’连接;如果不适用驼峰,则直接拿名称来使用。
        组件中的data必须是一个function并return数据对象,这样才能保证这个组件在不同的地方使用的时候数据不会实现共享,每个组件之间的数据是独立的。

render渲染组件
new Vue({
  el: '#app',
  router,
  components: { App },
  template: '<App/>',
  render:function(createElements){
    return createElements(login)
  }
})

在这个vue实例中只能渲染login这个组件,其他标签不会显示。
也可以写成render:h=>h(login),将h作为createElements的别名,返回h(login)即为createElements(login)

组件切换

方式一:

if-else

方式二:

使用component标签

        <a href="" @click.prevent="comName='login'"></a>
        <a href="" @click.prevent="comName='register'"></a>
        <component :is="comName"></component>
组件传值

        在组件的使用时,可以给组件传值,首先给组件绑定一个变量content,里面存放的值对应的是inputList的item,然后在组件的定义中添加props:[‘content’],这样在组件的模板中就可以使用content传过来值了。

        其实每一个vue组件就相当于一个vue实例,那么#root对应的vue实例也就是一个父组件,也就相当于在父组件中使用了子组件。如果一个vue实例没有template,那么就会去找它的挂载点,挂载点下面的所有DOM标签就是对应的模板,这样就解释了后面我们编程的时候,每个子组件我们都给一个文件存放,并且不写template标签。一个实例就对以一个组件。

父组件向子组件传值

        父组件可以在引用子组件的时候通过属性绑定(****v-bind:****)的形式把需要传递给子组件的数据传递过去。

v-bind:content='item'

        把inputList数组中的item作为一个属性content传递给todo-item这个子组件,在子组件的props属性中添加这个属性”content”,这样就可以在子组件中使用这个数据了。

方式一:使用props向子组件传值

(content是属性,item是父组件要传的数据,在子组件的props中用content接收这个数据)

父组件:

image.png
子组件:
image.png
        在子组件中,data中的数据是可读可写的,props中的数据是只读的
        父组件也可以向子组件传递方法,但是是用v-on:进行绑定的,v-on:func123=’parentFun’,在子组件中使用这个方法是用this. image.png
子组件:
image.png
子组件向父组件传值

通过发布订阅的方式

        子组件首先发布一个事件delete并携带一个数据this.$emit(‘delete’,this.index),在父组件中订阅了这个delete事件,并用方法deleteItem来接受子组件传过来的事件返回,v-on:delete=’deteleItem’,这样在deleteItem方法的参数中便可以得到子组件传过来的this.index数据。

        本质上是父组件定义了一个带参数的方法,并把这个方法传递给了子组件,当子组件调用这个方法的时候把自己的数据当做实参传入这个方法,父组件就相当于通过这个方法拿到了子组件的数据。

子组件:同样是childEvent事件,只不过子组件携带了参数


image.png
父组件: image.png
和之前父组件向子组件不同的是,parentMethod有返回e,这个e就是子组件传过来的值
父组件可以通过this.refs获取子组件的方法、数据。

相关文章

  • Vue父传子、子传夫通信--小案例

    父传子 子传夫 如有不懂,可以看我的 Vue-组件通信

  • Vue-基础-04-重点

    Vue-基础-day04-重点 01-基础-组件-局部组件 组件: 封装html+css+js 两类+三步 定义 ...

  • 4 动画及组件

    vue-> 过渡(动画) (它的本质走的是css3: transtion ,animation) 组件 ...

  • 《目录》

    更新到 111、MD5在项目中的加密のmd5单向加密2、vue-组件化の封装组件、引用组件3、微信小程序开发...

  • vue-组件

    1.Vue中是如何引入组件(对象 构造函数 )1.1. Vue是vue实例的构造函数, 通过new Vue() ...

  • VUE-组件

    组件 组件就是为了拆分Vue实例的代码量的,能够让我们以不同的组件来划分不同的功能模块,将来我们需要什么样的功能,...

  • Vue-组件

    定义Vue组件 什么是组件: 组件的出现,就是为了拆分Vue实例的代码量的,能够让我们以不同的组件,来划分不同的功...

  • Vue-组件

    一.组件 组件都具有模板,template new Vue()创建的是根组件 组件与实例一一对应,创建一个实例就是...

  • Vue-组件

  • vue-事件

    title: vue-事件处理date: 2017-03-23 vue 事件 本文介绍vue组件的事件处理,并通过...

网友评论

      本文标题:VUE-组件

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