zoukankan      html  css  js  c++  java
  • vue3封装input组件

    使用了2种方法去封装input组件(.vue与.jsx)

    代码如下

      父组件:

    <template>
      <div>
        <h1>input组件封装</h1>
        <Input v-model:val="val"></Input>
        <InputJsx v-model:valJsx="valJsx"></InputJsx>
        <button @click="getVal">获取input</button>
      </div>
    </template>
    
    <script lang="ts">
    import { reactive, toRefs, ref, defineComponent } from "vue";
    import HelloWorld from "@/components/HelloWorld.jsx";
    import Input from "@/components/Input.vue";
    import InputJsx from "@/components/Input.jsx";
    export default defineComponent({
      name: "",
      components: {
        HelloWorld,
        Input,
        InputJsx,
      },
      setup() {
        const data = reactive({});
        const val = ref("测试");
        const valJsx = ref("测试jsx");
        const getVal = () => {
          console.log("val值" + val.value);
          console.log("valJsx值" + valJsx.value);
        };
        return {
          val,
          valJsx,
          getVal,
          ...toRefs(data),
        };
      },
    });
    </script>
    <style scoped lang="less"></style>

      子组件:jsx写法

    import { defineComponent, ref, watch } from "vue";
    import "@/style/test.less";
    export default defineComponent({
      props: {
        valJsx: {
          type: String,
          default: "",
        },
      },
      setup(props, { emit }) {
        const changeVal = (event) => {
          console.log(event.target.value);
          emit("update:valJsx", event.target.value);
        };
        return (props) => {
          return (
            <div>
              <input value={props.valJsx} onChange={changeVal} type="text" />
            </div>
          );
        };
      },
    });

      子组件:vue写法

      

    <template>
      <div>
        <input :value="val" @input="$emit('update:val', $event.target.value)" type="text" />
      </div>
    </template>
    
    <script lang="ts">
    import { toRefs, defineComponent, watch } from "vue";
    export default defineComponent({
      name: "Input",
      props: {
        val: {
          type: String,
          default: "",
        },
      },
      emits: ["update:val"],
      setup(props, { emit }) {
        watch(
          () => props.val,
          (newVal) => {
            emit("update:val", newVal);
          },
        );
        return {
          ...toRefs(props),
        };
      },
    });
    </script>
    <style scoped lang="less"></style>

     

    多个v-model绑定

      子组件:

    <template>
      <div>title: </div>
      <input
        type="text"
        :value="title"
        @input="$emit('update:title', $event.target.value)">
      <span>{{title}}</span>
      <div></div>
      <div>description: </div>
      <input
        type="text"
        :value="description"
        @input="$emit('update:description', $event.target.value)">
      <span>{{description}}</span>
    </template>
    
    <script>
    export default {
      props: {
        title: String,
        description: String
      },
      emits: ['update:title', 'update:description'],
    }
    </script>

      父组件:

    <template>
    <CustomInput v-model:title="title"  v-model:description="description"></CustomInput>
    </template>
    
    <script>
    import CustomInput from '../components/CustomInput.vue'
    
    export default {
      components: { CustomInput },
      data() {
        return {
          title: '',
          description: '',
        }
      }
    }
    </script>

     

    完结:2021-09-06 17:27:02

  • 相关阅读:
    bzoj 3727: Final Zadanie 思维题
    bzoj 2510: 弱题 概率期望dp+循环矩阵
    bzoj 1131: [POI2008]Sta DFS
    bzoj 3572: [Hnoi2014]世界树 虚树
    bzoj 3611: [Heoi2014]大工程 虚树
    bzoj 3545: [ONTAK2010]Peaks Kruskal重构树
    bzoj 2118: 墨墨的等式 spfa
    bzoj 1441: Min 裴蜀定理
    bzoj 4540: [Hnoi2016]序列 莫队
    bzoj 4034: 树上操作 线段树
  • 原文地址:https://www.cnblogs.com/chailuG/p/15234772.html
Copyright © 2011-2022 走看看