九色国产,午夜在线视频,新黄色网址,九九色综合,天天做夜夜做久久做狠狠,天天躁夜夜躁狠狠躁2021a,久久不卡一区二区三区

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
 vue $attrs的使用

$attrs的使用 vue

  • $attrs是在vue的2.40版本以上添加的。
  • 項(xiàng)目中有多層組件傳參可以使用$attrs,可以使代碼更加美觀,更加簡(jiǎn)潔,維護(hù)代碼的時(shí)候更方便。如果使用普通的父子組件傳參prop$emit$on會(huì)很繁瑣;如果使用vuex會(huì)大材小用,只是在這幾個(gè)組件中使用,沒必要使用vuex;使用事件總線eventBus,使用不恰當(dāng)?shù)脑?,有可能?huì)出現(xiàn)事件多次執(zhí)行。
  • 如果給組件傳遞的數(shù)據(jù),組件不使用props接收,那么這些數(shù)據(jù)將作為組件的HTML元素的特性,這些特性綁定在組件的HTML根元素上
  • inheritAttrs: false的含義是不希望本組件的根元素繼承父組件的attribute,同時(shí)父組件傳過來(lái)的屬性(沒有被子組件的props接收的屬性),也不會(huì)顯示在子組件的dom元素上,但是在組件里可以通過其$attrs可以獲取到?jīng)]有使用的注冊(cè)屬性, ``inheritAttrs: false`是不會(huì)影響 style 和 class 的綁定

  • 以下是$attrs的使用示例(父組件的列表行數(shù)據(jù)傳遞給孫子組件展示)
  1. 父組件(Father.vue),給子組件關(guān)聯(lián)數(shù)據(jù),子組件如果不用props接收,那么這些數(shù)據(jù)就作為普通的HTML特性應(yīng)用在子組件的根元素上
<template>
  <div>
    <el-table :data='list'>
      <el-table-column
        prop="name"
        label="姓名"
      ></el-table-column>
      <el-table-column
        prop="study"
        label="學(xué)習(xí)科目"
      ></el-table-column>
      <el-table-column label="操作">
        <template slot-scope="scope">
          <el-button @click='transmitClick(scope.row)'>傳遞</el-button>
        </template>
      </el-table-column>
    </el-table>
    
    <!-- 兒子組件 -->
    <ChildView
      :is-show="isOpen"
      :row="row"
    >
    </ChildView>
  </div>
</template>

<script>
import ChildView from './Child.vue'
export default {
  components: { ChildView },
  data() {
    return {
      isOpen: false,
      row: {},
      list: [
        { name: '王麗', study: 'Java' },
        { name: '李克', study: 'Python' }
      ]
    }
  },
  methods: {
    // 傳遞事件
    transmitClick(row) {
      this.isOpen = true;
      this.row = row
    }
  }
}
</script>
  1. 兒子組件(Child.vue),中間層,作為父組件和孫子組件的傳遞中介,在兒子組件中給孫子組件添加v-bind="$attrs",這樣孫子組件才能接收到數(shù)據(jù)
<template>
  <div class='child-view'>
    <p>兒子組件</p>
    <GrandChild v-bind="$attrs"></GrandChild>
  </div>
</template>

<script>
import GrandChild from './GrandChild.vue'
export default {
  // 繼承所有父組件的內(nèi)容
  inheritAttrs: true,
  components: { GrandChild },
  data() {
    return {
    }
  }
}
</script>

<style lang="stylus">
.child-view {
  margin: 20px
  border: 2px solid red
  padding: 20px
}
</style>
  1. 孫子組件(GrandChild.vue),在孫子組件中一定要使用props接收從父組件傳遞過來(lái)的數(shù)據(jù)
<template>
  <div class='grand-child-view'>
    <p>孫子組件</p>
    <p>傳給孫子組件的數(shù)據(jù):{{row.name}} {{row.name !== undefined? '學(xué)習(xí)' : ''}} {{row.study}}</p>
  </div>
</template>

<script>
export default {
  // 不想繼承所有父組件的內(nèi)容,同時(shí)也不在組件根元素dom上顯示屬性
  inheritAttrs: false,
  // 在本組件中需要接收從父組件傳遞過來(lái)的數(shù)據(jù),注意props里的參數(shù)名稱不能改變,必須和父組件傳遞過來(lái)的是一樣的
  props: {
    isShow: {
      type: Boolean,
      dedault: false
    },
    row: {
      type: Object,
      dedault: () => { }
    }
  }
}
</script>

<style lang="stylus">
.grand-child-view {
  border: 2px solid green
  padding: 20px
  margin: 20px
}
</style>

結(jié)果:

在上面提過,如果給子組件傳遞的數(shù)據(jù),子組件不使用props接收,那么這些數(shù)據(jù)將作為子組件的特性,這些特性綁定在組件的HTML根元素上,在vue2.40版本之后,可以通過inheritAttrs = false 來(lái)控制這些特性是否顯示在dom元素上 如:案例中父組件給子組件傳遞的row和isShow,子組件沒有使用props接收,這個(gè)2個(gè)數(shù)據(jù)直接作為HTML的特殊屬性。子組件使用inheritAttrs = true,那么特性顯示在dom上,如果設(shè)置為false,那么特性不顯示在dom上

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
13. Vue3自定義組件上面使用v-mode雙休數(shù)據(jù)綁定 以及 slots以及 Prop 的Attribute 繼承 、禁用 Attribute 繼承
Vue.js最佳實(shí)踐(五招讓你成為Vue.js大師)
vue中8種組件通信方式, 值得收藏!
一次由點(diǎn)餐引發(fā)的 Vue2.0 實(shí)戰(zhàn)
Vue組件常用的六種通信方式
學(xué)會(huì)這些Vue小技巧,可以早點(diǎn)下班和女神約會(huì)
更多類似文章 >>
生活服務(wù)
熱點(diǎn)新聞
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服