<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      vue中如何在自定義組件上使用v-model和.sync

      自定義事件

      tips

      1. 推薦始終使用 kebab-case 的事件名。(v-on會將事件名自動轉換為小寫,避免匹配不到)
        • changeData ×
        • change-data √

      自定義組件的v-model

      1. 用法:
        • 父組件定義數據源(不需要定義修改數據的方法),在子組件標簽上通過v-model="data"進行傳遞
        • 默認傳遞的屬性名是value,事件名為input。可以在子組件中配置model選項重命名屬性名和事件名
        • 子組件props接受名稱為value的屬性(固定名),通過$emit("input", payload)在子組件即可修改數據,形成雙向綁定
          // 父組件
          <template>
          <div>
              <p>我是dad</p>
              <span>{{ dadData }}</span>
              <Son v-model="dadData" />
          </div>
          </template>
      
          <script>
              import Son from "./SonItem.vue";
      
              export default {
                  components: {
                      Son,
                  },
                  data() {
                      return {
                      dadData: "我是爹地",
                      };
                  },
              };
          </script>
      
          // 子組件
          <template>
              <div>
                  <p>我是兒子組件</p>
                  <input type="text" :value="value" @input="sonInput" />
                  <button @click="btnClick(Date.now())">點擊</button>
              </div>
          </template>
      
          <script>
              export default {
                  // 如果重命名,記得這里也要修改哦 props: ["novalue]
                  props: ["value"],
                  // 這里可以重命名接收到的屬性值和事件名
                  // model: {
                  //   prop: "novalue",
                  //   event: "changeNoval",
                  // },
                  methods: {
                      sonInput(e) {
                          this.$emit(`input`, e.target.value);
                      },
                      btnClick(data) {
                          this.$emit(`input`, data);
                      },
                  },
              };
          </script>
      
      
      

      .sync 修飾符

      1. 為什么會有這個修飾符?它解決了什么問題?

        • 正常我們父子組件通信是父組件props傳參,v-on監聽改變數據的事件,子組件通過$emit去觸發。
        • 父組件每次都要定義類似的事件函數this.data = newData,如果是一個對象,那么它的每個屬性傳遞過去都要定義相應的事件函數(麻煩重復的代碼變多了)
        • .sync就是用來簡化這塊的代碼
      2. 怎么使用.sync?

        • 父組件直接在子組件標簽上使用 :name.sync="person.name"
        • 默認發送的處理的事件名為 update:name,name就是你傳過去的屬性名
        • 如果需要使用屬性,子組件可以通過props接收,也可以使用$attr,$parent等獲取。注意:props接收過的屬性不會出現在當前實例的$attr中
        • 如果需要觸發事件,可以使用$emit("update:屬性名", payload),也可以使用$listener
        • 使用v-bind.sync="obj"可以把obj對象中的每個屬性和事件自動分發給子組件
      // 父組件
      <template>
        <div>
          <p>我是dad</p>
          <span>{{ dadData }}</span>
          <Son :something.sync="dadData" v-bind.sync="dadObj" />
        </div>
      </template>
      
      <script>
      import Son from "./SonItem.vue";
      
      export default {
        components: {
          Son,
        },
        data() {
          return {
            dadData: "我是爹地",
            dadObj: {
              girlFriends: ["dingding", "momo", "weiwei"],
              age: 24,
            },
          };
        },
      };
      </script>
      
      
      // 子組件
      <template>
        <div>
          <p>我是兒子組件</p>
          <button @click="btnClick(Date.now())">點擊</button>
          <span>{{ something }}</span>
          <span>{{ girlFriends }}</span>
        </div>
      </template>
      
      <script>
      export default {
        props: ["something", "girlFriends"],
        methods: {
          btnClick(data) {
            this.$emit(`update:something`, data);
          },
        },
        mounted() {
          this.$listeners["update:girlFriends"](["singleDog"]);
          // {age: 24}
          console.log(this.$attrs);
        },
      };
      </script>
      
      
      

      思考

      v-model和.sync本質都是語法糖,設計出來就是為了方便使用減少代碼量。不過更利于使用的封裝究竟是方便新手的上手還是加重了學習負擔,可能各執己見吧


      文章只是個人學習文檔并記錄總結,具體細節請自行查閱官方文檔

      https://cn.vuejs.org/v2/guide/components-custom-events.html

      posted @ 2022-07-29 10:42  lupulus  閱讀(1170)  評論(1)    收藏  舉報
      主站蜘蛛池模板: 亚洲一区二区国产av| 亚洲中文字幕日产无码成人片| 老色99久久九九爱精品| 精品国产中文字幕av| 欧产日产国产精品精品| 国产成人精品中文字幕| 欧美成本人视频免费播放| 大陆精大陆国产国语精品| 亚洲精品中文av在线| 亚洲天堂一区二区三区四区 | 久久精品国产99久久久古代| 九九热在线免费视频观看| 中文字幕制服国产精品| 日韩av在线不卡一区二区| 无限看片在线版免费视频大全| 人妻换着玩又刺激又爽| 国产精品麻豆成人av电影艾秋 | 中文字幕结果国产精品| 免费无码又爽又刺激成人| 麻花传剧mv在线看免费| 国产精品七七在线播放| 国产一区二区精品自拍| 神马久久亚洲一区 二区| 日本成熟少妇激情视频免费看| 鹤峰县| 国产又色又爽又黄的视频在线| 日本一卡2卡3卡4卡无卡免费| 国产成人午夜精品福利| 全免费A级毛片免费看无码| 99riav国产精品视频| 亚洲狠狠婷婷综合久久久| 97精品亚成在人线免视频| 91中文字幕一区在线| 九九在线精品国产| 97久久超碰亚洲视觉盛宴| 清水县| 亚洲精品无码在线观看| 高清有码国产一区二区| 中国熟妇牲交视频| 亚洲av激情一区二区三区| 国色天香成人一区二区|