vue组件

组件传值

父传子(子组件设置props属性)

实例代码

  1. 子组件设置

    • const app = new Vue({
          ......,
          props:['addList']
      })
      
    • 1)子组件接收父组件传递的参数,设置的名自定义,但名字一定是有意义的名字,避免后续更改代码更好更改

    • 2)接收到的参数可以进行遍历,或者是直接进行使用,直接使用props;里面定义的名字即可

    <ul>
        <li v-for="item in addList" :key="item.id"></li>
    </ul>
    
  1. 父组件设置

    • 父组件在传递值是,将在定义好在data里面的数据传递给子组件进行使用。
    <组件名 :add-list='itemList'></组件名>
    <script>
      const app = new Vue({
          data:{
              itenList:[1,2,3,4,5,6]
          }
      })
    </script>
    
    • 子组件设置props命名使用addlist,父组件绑定时使用v-bind绑定 :add-list的形式进行使用
  2. 在传值的时候,如果父组件向子组件传递的是字符串,则不需要v-bind绑定,如果传递的是变量,则需要通过v-bind进行绑定

props属性参数

1)、方式一
props: {
    addList: [Array,Object]
}

2)、方式二
props: {
    add;ist: {
        type: [Array, Object],
        required: true,
        default:'默认值',
        validator: function (newValue) {
            return 
        }
    }   
}
  1. 参数1:type代表的是,指定传递父组件传递过来的参数是什么类型
  2. 参数2:required代表的是,毕传值,意思就是子组件设置了这条属性,必须传递值过来
  3. 参数3:default代表的是,默认值,当父组件传递过来的参数,接收不到,子组件将使用默认值进行展示
  4. 参数4:validator代表的是,对传递过来的内容做具体的检测,返回一个布尔值,ture执行false不执行。函数内部不可以使用this找到当前组件的data等数据。

子传父

通过使用自定义事件向父组件传递值

子组件发生变化,通过$enit()触发一个自定义事件

使用场景,子组件发生了一些事件,告诉父组件发生了什么事件,并且告诉父组件,现在发生事件这里对应点击的数据是谁,然后给父组件传递过去,父组件根据子组件传递过来的数据,去服务器请求新的数。在传递给子组件,让子组件进行渲染

  1. 子组件设置

    <button @click='submit(item)'></button>
    <script>
     const app = new Vue({
            .....,
            methods: {
              submit (item) {
             this.$emit('onclicks',item)
           }
            }
        })
    </script>
    
    • 通过点击按钮,发送一个自定义事件,第二个参数是默认值,可以将当前行数据传递给父组件,进行处理
  2. 父组件

    <组件名 @onclicks="btnsLiks"></组件名>
    <script>
     const app = new Vue({
          ...,
          methods: {
         btnsLiks (item) {  // 需要接收子组件传过来的默认值
             // 请求数据等处理
         }
       }
     })
    </script>
    
    • 父组件使用v-on绑定子组件发送过来的自定义事件名@onclicks
    • 绑定结束后,需要书写一个方法,处理数据或者是请求等
    • 接收参数时,如果是在模板上书写,可以使用$event进行接收, 如果是在处理程序内书写,直接向上面是写一样,进行处理,参数名自定义

组件与v-model

举例说明使用方式

  1. 子组件

    <img src="value" />
    <button @click="submit(item)">上传图片</button>
    
    <script>
     export default {
            props:{
                value: String
            },
            methods: {
                submit () {
                    this.$emit('input',item)
                }
            }
        }
    </script>
    
    • 子组件触发按钮,发送一个自定义事件,向父组件传递参数。props是接收父组件传递回来的参数
  2. 父组件

    <组件名 v-model='images'></组件名>
    
    <script>
     export default {
           data () {
               return {
                   images:''
               }
           }
        }
    </script>
    
    • 父组件通过v-model进行参数接收,然后再讲参数返回给子组件
  • 我们知道,v-model 是由v-bind与@input事件构成的,他分开写是下面的形式
<input  :value="value" @input="value = $event.target.value" />

拿那个课程上传课程封面来说,单独抽出来放在一个组件,子组件发送自定义事件,父组件通过v-model进行接收,父组件需要这个参数保存信息,然后在通过父子传值传递给子组件(props),关键来了,在这之间有一个 v-model 特可以分开写成v-bind与@input,我刚才一直想不通的是在这之间,他是怎么把值存起来的,找了一下,发现v-model分开写,@input的部分是这么写的,@input=" 某一个值 = $event.target.传递过来的值 ",我才发现在这之间他把这个值存到了下面的变量里面,在通过父子传值,将这个变量内部的信息传递给子组件,进行使用

非父子组件传值(EvenBus)

是一个独立的事件中心,用于管理不同的组件之间传值操作,特点是独立

使用方式

eventbus是通过新的实例管理组件传值操作,组件通过给实例注册事件,调用事件实现数据的传递

新的vue实例是不需要传递任何选项,比如说el选项等,一般会在单个js文件内部进行定义

var bus = new Vue()

在使用时需要引入js文件

  1. 要传递数据的组件

    • 通过组件发送自定义事件,但在处理程序里,不是通过this打点使用$emit,而是通过bus进行调用
    <button @click='submit(value)'></button>
    <script scr="bus.js"></script>
    <script>
     export default {
            ......,
            methods: {
             submit () {
                    bus.$emit('change',value)
                }
         }
        }
    </script>
    
  2. 接收数据的组件

    • 接收参数的组件内部需要通过$on 给bus注册事件
    <script>
     export default {
            data () {
                return {
                    value: ''
                }
            },
            methods: {
                bus.$on('change',function (item) {
                 this.value = item
             })
            }
        }
    </script>
    
    • $on内部需要书写两个参数,第一个参数代表的是,传值组件传递过来的自定义事件名称,参数二是时间处理程序,内部接收到的参数是组件传递过来的值,参数名自定义。

$refs

操作html元素,通过此方法可以获取到html元素

通过给html标签设置ref属性:属性参数自定义名字

然后在通过$refs.属性调用方法

<input  type="text" ref="ipt">
<buttton @click="k">点击按钮</buttton>
<script>
    new Vue({
        el:"#app",data:{},
        methods:{
            k:function(){
                //设置ref通过refs调用
                this.$refs.ipt.focus()
            }
        }
    })
</script>

组件插槽

设置组件的思想,抽取共性,保留不同

  1. 最好的方式就是将相同的组件抽取出来,将不同的地方设置成插槽
  2. 一旦封装的组件预留插槽,在不同的页面上,根据不同的需求,插入不同内容
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 196,165评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,503评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 143,295评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,589评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,439评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,342评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,749评论 3 387
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,397评论 0 255
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,700评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,740评论 2 313
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,523评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,364评论 3 314
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,755评论 3 300
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,024评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,297评论 1 251
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,721评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,918评论 2 336

推荐阅读更多精彩内容

  • 夜莺2517阅读 127,696评论 1 9
  • 我是黑夜里大雨纷飞的人啊 1 “又到一年六月,有人笑有人哭,有人欢乐有人忧愁,有人惊喜有人失落,有的觉得收获满满有...
    陌忘宇阅读 8,505评论 28 53
  • 兔子虽然是枚小硕 但学校的硕士四人寝不够 就被分到了博士楼里 两人一间 在学校的最西边 靠山 兔子的室友身体不好 ...
    待业的兔子阅读 2,572评论 2 9
  • 信任包括信任自己和信任他人 很多时候,很多事情,失败、遗憾、错过,源于不自信,不信任他人 觉得自己做不成,别人做不...
    吴氵晃阅读 6,165评论 4 8