亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Vue2子組件怎么綁定v-model實現父子組件通信

發布時間:2023-04-20 16:45:22 來源:億速云 閱讀:154 作者:iii 欄目:開發技術

本篇內容介紹了“Vue2子組件怎么綁定v-model實現父子組件通信”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

    前言

    v-model 可以在組件上使用以實現雙向綁定。

    首先讓我們回憶一下 v-model 在原生元素上的用法:

    <input v-model="firstName" />

    在代碼背后,模板編譯器會對 v-model 進行更冗長的等價展開。因此上面的代碼其實等價于下面這段:

    <input
      :value="firstName"
      @input="firstName = $event.target.value"
    />

    默認用法

    父組件

    <template>
      <div>
        <h2>{{ first }}-{{ last }}</h2>
        <UserName
          :firstName="first"
          :lastName="last"
          @update:firstName="func1"
          @update:lastName="func2"
        />
      </div>
    </template>
     
    <script>
    import UserName from "./UserName.vue";
    export default {
      name: "V-Model",
      components: {
        UserName,
      },
      data() {
        return {
          first: "000",
          last: "123",
        };
      },
      methods: {
        // 默認用法
        func1(val) {
          this.first = val;
        },
        func2(val) {
          this.last = val;
        },
      },
    };
    </script>

    子組件

    <template>
      <div>
        <input v-model="first" type="text" @input="input1" />
        <input v-model="last" type="text" @input="input2" />
      </div>
    </template>
     
    <script>
    export default {
      name: "UserName",
      props: ["firstName", "lastName"],
     
      data() {
        return {
          first: this.firstName,
          last: this.lastName,
        };
      },
      methods: {
        input1() {
          this.$emit("update:firstName", this.first);
        },
        input2() {
          this.$emit("update:lastName", this.last);
        },
      },
    };
    </script>

    以上就可以實現 父子組件的雙向綁定

    Vue2子組件怎么綁定v-model實現父子組件通信

    .sync寫法

    傳參的時候加上 .sync 會簡化上面的寫法,父組件不需要定義更新觸發函數(update)

     <UserName :firstName.sync="first" />

    會被擴展為:

    <UserName :firstName="first" @update:firstName="val => first = val"></UserName>

    當子組件需要更新 firstName 的值時,它需要顯式地觸發一個更新事件:

    this.$emit('update:firstName', newValue)

    父組件

    <template>
      <div>
        <h2>{{ first }}-{{ last }}</h2>
        <UserName :firstName.sync="first" :lastName.sync="last" />
      </div>
    </template>
     
    <script>
    import UserName from "./UserName.vue";
    export default {
      name: "V-Model",
      components: {
        UserName,
      },
     
      data() {
        return {
          first: "000",
          last: "123",
        };
      },
      methods: {
       
      },
    };
    </script>

    子組件

    <template>
      <div>
        <input type="text" :value="firstName" @input="$emit('update:firstName', $event.target.value)" />
        <input type="text" :value="lastName" @input="$emit('update:lastName', $event.target.value)" />
      </div>
    </template>
     
    <script>
    export default {
      name: "UserName",
      components: {},
      props: ["firstName", "lastName"],
      data() {
        return {};
      },
      methods: {},
    };
    </script>

    以上也可以實現 父子組件的雙向綁定

    Vue2子組件怎么綁定v-model實現父子組件通信

    綁定單個 v-model

    當使用在一個組件上時,v-model 會被展開為如下的形式:

     <UserName v-model="first"  />
     <!-- 上面等同于下面的寫法 -->
    <UserName
      :modelValue="first"
      @input="first= $event.target.value"
    />

    父組件

    <template>
      <div>
        <h2>{{ first }}-{{ last }}</h2>
        <UserName v-model="first"  />
      </div>
    </template>
     
    <script>
    import UserName from "./UserName.vue";
    export default {
      name: "V-Model",
      components: {
        UserName,
      },
     
      data() {
        return {
          first: "000",
          last: "123",
        };
      },
      methods: {
        
      },
    };
    </script>

    子組件

    <template>
      <div>
        <input
          type="text"
          :value="firstName"
          @input="$emit('update', $event.target.value)"
        />
      </div>
    </template>
     
    <script>
    export default {
      name: "UserName",
      components: {},
      props: ["firstName"],
      model: {
        prop: "firstName",
        event: "update",
      },
     
      data() {
        return {};
      },
    };
    </script>

    現在可以實現單個 輸入框綁定

    Vue2子組件怎么綁定v-model實現父子組件通信

    “Vue2子組件怎么綁定v-model實現父子組件通信”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    什邡市| 彭阳县| 鹿邑县| 广西| 九龙县| 广水市| 昌平区| 曲靖市| 兴城市| 浦县| 尉犁县| 公主岭市| 保靖县| 亚东县| 紫云| 满洲里市| 太康县| 开封市| 随州市| 汝州市| 湄潭县| 阳朔县| 潍坊市| 济阳县| 鹤岗市| 平谷区| 亚东县| 晋江市| 勃利县| 玛多县| 招远市| 繁峙县| 台山市| 鄂托克前旗| 彭阳县| 鄱阳县| 卢龙县| 济阳县| 鲁甸县| 左权县| 龙泉市|