<strike id="3tkic"><sup id="3tkic"></sup></strike>

  1. <ul id="3tkic"></ul>
      <b id="3tkic"><legend id="3tkic"></legend></b>
      <b id="3tkic"><meter id="3tkic"></meter></b>

    • <strike id="3tkic"></strike>

      <blockquote id="3tkic"></blockquote>

    • 亚洲AV无码国产在丝袜线观看_亚洲第一页A∨在线_亚洲国产人成在线观看69网站_无码日韩人妻AV一区免费l

      Vue組件通信方式居然有這么多?你了解幾種

      2020/10/28 10:24:47   閱讀:2896    發(fā)布者:2896

      1. props/$emit

      props和$emit相信大家十分的熟悉了,這是我們最常用的vue通信方式。
      props
      props可以是數(shù)組或?qū)ο?,用于接收來自父組件通過v-bind傳遞的數(shù)據(jù)。當props為數(shù)組時,直接接收父組件傳遞的屬性;當 props 為對象時,可以通過typedefault、required、validator等配置來設(shè)置屬性的類型、默認值、是否必傳和校驗規(guī)則。
      $emit
      在父子組件通信時,我們通常會使用$emit來觸發(fā)父組件v-on在子組件上綁定相應(yīng)事件的監(jiān)聽。

      2. v-slot

      v-slot是 Vue2.6 版本中新增的用于統(tǒng)一實現(xiàn)插槽和具名插槽的api,用于替代slot(2.6.0廢棄)slot-scope(2.6.0廢棄)、scope(2.5.0廢棄)api
      v-slot
      template 標簽中用于提供具名插槽或需要接收 prop 的插槽,如果不指定 v-slot ,則取默認值 default 。

      3. $refs/$parent/$children/$root

      我們也同樣可以通過 $refs/$parent/$children/$root 等方式獲取 Vue 組件實例,得到實例上綁定的屬性及方法等,來實現(xiàn)組件之間的通信。
      $refs
      我們通常會將 $refs 綁定在DOM元素上,來獲取DOM元素的 attributes。在實現(xiàn)組件通信上,我們也可以將 $refs 綁定在子組件上,從而獲取子組件實例。
      $parent
      我們可以在 Vue 中直接通過this.$parent來獲取當前組件的父組件實例(如果有的話)。
      $children
      同理,我們也可以在 Vue 中直接通過this.$children來獲取當前組件的子組件實例的數(shù)組。但是需要注意的是,this.$children數(shù)組中的元素下標并不一定對用父組件引用的子組件的順序,例如有異步加載的子組件,可能影響其在 children 數(shù)組中的順序。所以使用時需要根據(jù)一定的條件例如子組件的name去找到相應(yīng)的子組件。
      $root
      獲取當前組件樹的根 Vue 實例。如果當前實例沒有父實例,此實例將會是其自己。通過 $root ,我們可以實現(xiàn)組件之間的跨級通信。

      4. $attrs/$listener

      $attrs 和 $listeners 都是 Vue2.4 中新增加的屬性,主要是用來供使用者用來開發(fā)高級組件的。

      $attrs
      用來接收父作用域中不作為 prop 被識別的 attribute 屬性,并且可以通過v-bind="$attrs"傳入內(nèi)部組件——在創(chuàng)建高級別的組件時非常有用。
      試想一下,當你創(chuàng)建了一個組件,你要接收 param1 、param2、param3 …… 等數(shù)十個參數(shù),如果通過 props,那你需要通過props: ['param1', 'param2', 'param3', ……]等聲明一大堆。如果這些 props 還有一些需要往更深層次的子組件傳遞,那將會更加麻煩。
      而使用 $attrs ,你不需要任何聲明,直接通過$attrs.param1$attrs.param2……就可以使用,而且向深層子組件傳遞上面也給了示例,十分方便。

      $listeners
      包含了父作用域中的 v-on 事件監(jiān)聽器。它可以通過 v-on="$listeners" 傳入內(nèi)部組件——在創(chuàng)建更高層次的組件時非常有用,這里

      5. provide/inject

      provide/inject這對選項需要一起使用,以允許一個祖先組件向其所有子孫后代注入一個依賴,不論組件層次有多深,并在其上下游關(guān)系成立的時間里始終生效。如果你是熟悉React的同學,你一定會立刻想到Context這個api,二者是十分相似的。
      provide
      是一個對象,或者是一個返回對象的函數(shù)。該對象包含可注入其子孫的 property ,即要傳遞給子孫的屬性和屬性值。
      injcet
      一個字符串數(shù)組,或者是一個對象。當其為字符串數(shù)組時,使用方式和props十分相似,只不過接收的屬性由data變成了provide中的屬性。當其為對象時,也和props類似,可以通過配置defaultfrom等屬性來設(shè)置默認值,在子組件中使用新的命名屬性等。

      6. eventBus

      eventBus又稱事件總線,通過注冊一個新的Vue實例,通過調(diào)用這個實例的$emit$on等來監(jiān)聽和觸發(fā)這個實例的事件,通過傳入?yún)?shù)從而實現(xiàn)組件的全局通信。它是一個不具備 DOM 的組件,有的僅僅只是它實例方法而已,因此非常的輕便。
      我們可以通過在全局Vue實例上注冊:

      // main.js

      Vue.prototype.$Bus = new Vue()

      但是當項目過大時,我們最好將事件總線抽象為單個文件,將其導入到需要使用的每個組件文件中。這樣,它不會污染全局命名空間:

      // bus.js,使用時通過import引入

      import Vue from 'vue'

      export const Bus = new Vue()

      7. Vuex

      當項目龐大以后,在多人維護同一個項目時,如果使用事件總線進行全局通信,容易讓全局的變量的變化難以預(yù)測。于是有了Vuex的誕生。
      Vuex
      是一個專為 Vue.js 應(yīng)用程序開發(fā)的狀態(tài)管理模式。它采用集中式存儲管理應(yīng)用的所有組件的狀態(tài),并以相應(yīng)的規(guī)則保證狀態(tài)以一種可預(yù)測的方式發(fā)生變化。
      有關(guān)Vuex的內(nèi)容,可以參考Vuex官方文檔,我就不在這里班門弄斧了,直接看代碼。


      亚洲AV无码国产在丝袜线观看_亚洲第一页A∨在线_亚洲国产人成在线观看69网站_无码日韩人妻AV一区免费l
      <strike id="3tkic"><sup id="3tkic"></sup></strike>

      1. <ul id="3tkic"></ul>
          <b id="3tkic"><legend id="3tkic"></legend></b>
          <b id="3tkic"><meter id="3tkic"></meter></b>

        • <strike id="3tkic"></strike>

          <blockquote id="3tkic"></blockquote>

        • 上林县| 礼泉县| 柳州市| 阜南县| 鄯善县| 漳州市| 固原市| 满城县| 新昌县| 新和县| 东安县| 额济纳旗| 宜黄县| 汤原县| 丹东市| 宿州市| 陆丰市| 肇东市| 彝良县| 扎兰屯市| 青龙| 鄢陵县| 安乡县| 高雄县| 永寿县| 涪陵区| 土默特左旗| 慈利县| 通化市| 涡阳县| 阳朔县| 台前县| 洞口县| 项城市| 西华县| 章丘市| 新化县| 金堂县| 晋宁县| 通化市| 黄陵县|