Rumah > hujung hadapan web > View.js > teks badan

Apakah mata pengetahuan API biasa untuk pembangunan komponen vue3?

WBOY
Lepaskan: 2023-05-16 22:55:26
ke hadapan
1065 orang telah melayarinya

    Pemikiran berasaskan komponen

    Mengapa menggunakan pembangunan berasaskan komponen?

    Rangka kerja bahagian hadapan yang popular pada masa ini seperti Vue React akan melengkapkan keperluan perniagaan dengan menulis komponen, iaitu pembangunan berasaskan komponen. Termasuk pembangunan program kecil, idea pembangunan komponen juga akan digunakan.

    Analisis idea berkomponen untuk membangunkan aplikasi:

    • Pisah halaman lengkap kepada banyak komponen kecil

    • Setiap Setiap komponen digunakan untuk melengkapkan modul berfungsi halaman

    • Setiap komponen juga boleh dibahagikan (komponen ibu bapa-anak)

    • Komponen biasa boleh diduplikasi Menggunakan halaman berbeza

    Halaman Vue hendaklah disusun seperti pokok komponen bersarang:

    Apakah mata pengetahuan API biasa untuk pembangunan komponen vue3?

    vue3 Fail masuk:

    import { createApp } from 'vue';
    import App from './App.vue';
    
    createApp(App).mount('#app');
    Salin selepas log masuk

    createApp()Fungsi lulus dalam App, App ialah komponen dan merupakan komponen akar projek.

    Yang berikut akan menganalisis kaedah biasa pembangunan komponen dalam Vue3.

    Komunikasi komponen

    $props

    • $props digunakan untuk menghantar data kepada komponen kanak-kanak

    rreee
    • <script setup> Anda perlu menggunakan definePropsApi untuk mendapatkan props

    <p> $props: {{$props}} </p>
    Salin selepas log masuk

    $emits

    • $emit Kaedah untuk memanggil komponen induk

    const props = defineProps({
      num: Number,
    })
    Salin selepas log masuk
    • <script setup> Sintaksis gula perlu digunakan defineEmitsPernyataan api memancarkan

    <button @click="$emit(&#39;add&#39;)">
      add
    </button>
    Salin selepas log masuk

    $parent

    • $parent digunakan untuk mendapatkan objek contoh komponen induk. Contoh komponen dalam

    <script setup> tidak akan didedahkan dan menggunakan $parent terus dalam templat akan mengembalikan objek kosong.

    Untuk menentukan atribut yang akan didedahkan dalam komponen <script setup>, gunakan defineExpose makro pengkompil:

    <button @click="add">{{ num }}</button>
    
    const emits = defineEmits([&#39;add&#39;])
    function add() {
      emits(&#39;add&#39;)
    }
    Salin selepas log masuk

    Sub-komponen:

    const parData = ref("父组件数据");
    defineExpose({
      parData,
    })
    Salin selepas log masuk

    $attrs

    • mengandungi pengikatan atribut dan peristiwa dalam skop induk yang bukan komponen props atau peristiwa tersuai.

    Komponen anak:

    <p>父组件 parData: {{$parent.parData}}</p>
    Salin selepas log masuk

    Dalam komponen induk, nilai $attrs ialah { "a": "a", "b": "b" }.

    • Apabila komponen tidak mengisytiharkan sebarang prop, semua pengikatan skop induk akan disertakan di sini dan komponen dalaman boleh disalurkan melalui v-bind="$attrs" - Ini berguna apabila mencipta tinggi -level Ini sangat berguna untuk komponen dalam susunan yang sama, contohnya:

    Komponen induk:

    <Foo a="a" b="b" :num="num" @add="add" />
    Salin selepas log masuk

    Komponen kanak-kanakBar.vue

    rreee

    Lihat dalam DOM penyemak imbas, age 和 sex terikat pada teg p ini sebagai atribut.

    • <script setup>, anda perlu menggunakan useAttrs

    <Bar :age=18 sex="boy" />
    Salin selepas log masuk

    menyediakan & menyuntik

    • Untuk komunikasi komponen peringkat merentas/berbilang peringkat

    • Komponen induk mempunyai pilihan provide untuk menyediakan data dan komponen anak mempunyai pilihan inject untuk mula menggunakan data.

    Komponen induk:

    <p v-bind="$attrs">将$attrs对象绑定到当前标签</p>
    Salin selepas log masuk

    Komponen turunan:

    import { useAttrs } from &#39;vue&#39;;
    
    const attrs = useAttrs();
    console.log(attrs.sex); // boy
    Salin selepas log masuk

    Slot slot

    digunakan untuk pengedaran kandungan, akan <slot> elemen berfungsi sebagai saluran keluar untuk membawa kandungan yang diedarkan.

    SlotComp Komponen

    provide("user", "kong");
    provide("pass", 123456);
    Salin selepas log masuk

    menggunakan komponen di atas

    const user = inject("user");
    const pass = inject("pass");
    Salin selepas log masuk

    SlotComp Kandungan slot name dengan atribut slot dalam komponen akan menjadi diganti. Kandungan yang diganti perlu menggunakan arahan v-slot dalam komponen induk untuk menyediakan slot dengan kandungan yang ingin anda paparkan.

    Skop pemaparan

    <template>
      <div :>
        <slot name="head"></slot>
      </div>
      <div :>
        <slot name="foot"></slot>
      </div>
    </template>
    Salin selepas log masuk

    Dalam contoh di atas, {{items}} tidak akan memaparkan data.

    Semua kandungan dalam templat induk disusun dalam skop induk; semua kandungan dalam templat anak disusun dalam skop kanak-kanak.

    Slot skop

    Biar kandungan slot mengakses data hanya dimiliki oleh komponen anak:

              <SlotComp>
                <template v-slot:head>
                  <p>head插槽</p>
                </template>
                <template v-slot:foot>
                  <p>foot插槽</p>
                </template>
              </SlotComp>
    Salin selepas log masuk

    Kandungan slot:

                <template v-slot:foot>
                  <p>foot插槽</p>
                  {{msg}}
                  {{items}}
                </template>
    Salin selepas log masuk

    The atribut yang terikat pada elemen <slot> dipanggil slot prop. Kini, dalam skop induk, kita boleh mentakrifkan nama prop slot yang kami sediakan menggunakan nilai v-slot, dalam kes ini slotProps.

    v-model

    Komponen borang

    • Gunakan v-model pada borang untuk mencapai pengikatan dua hala:

    <input v-model="text" />
    Salin selepas log masuk

    自定义组件

    • v-model 应用在自定义组件上面:

    父组件中使用自定义组件:

    const msg = ref(&#39;hello world!&#39;);
    
    <ModelComp v-model="msg"></ModelComp>
    Salin selepas log masuk

    相当于:

              <ModelComp 
                :modelValue="msg"
                 @update:modelValue="msg = $event"
              >
              </ModelComp>
    Salin selepas log masuk

    自定义组件ModelComp.vue中:

    const props = defineProps({
      modelValue: String
    })
    const emits = defineEmits([
      "update:modelValue"
    ])
    
    const text = ref("请输入..");
    
    // text改变时执行
    watch(text,()=>{
      emits("update:modelValue",text.value);
    })
    Salin selepas log masuk

    改变默认参数

    • 未设置参数时如上,默认绑定的参数是 modelValue update:modelValue

    设置v-model参数:

    <ModelComp v-model:show="show"></ModelComp>
    Salin selepas log masuk

    相当于:

              <ModelComp 
                :show="showFlag"
                 @update:show="showFlag = $event"
              >
              </ModelComp>
    Salin selepas log masuk

    自定义组件ModelComp.vue中:

    const props = defineProps({
      show: Boolean
    })
    const emits = defineEmits([
      "update:show",
    ])
    Salin selepas log masuk

    样式绑定相关

    class

    class绑定:根据需求动态绑定class样式时可以使用一下几种方法

    写法1:对象语法

    <button @click="changeColor" :class="{ active: isActive }">
        点击切换我的文体颜色样式
    </button>
    
    const isActive = ref(false);
    const changeColor = () => {
      isActive.value = !isActive.value;
    }
    Salin selepas log masuk

    写法2:对象语法

    <button @click="changeColor2" :class="classObj">
              点击切换颜色,根据计算属性
    </button>
    
    const isActive2 = reactive({
    active: false,
    })
    const classObj = computed(() => {
    return {
      active: isActive2.active,
      &#39;font-30&#39;: true,
    }
    })
    const changeColor2 = () => {
    isActive2.active = !isActive2.active
    }
    Salin selepas log masuk

    写法3:数组语法

    <div :class="[activeClass, errorClass]"></div>
    Salin selepas log masuk

    三目运算符写法

    <div :class="[isActive ? activeClass : &#39;&#39;, errorClass]"></div>
    Salin selepas log masuk

    数组语法中结合对象语法使用

    <div :class="[{ active: isActive }, errorClass]"></div>
    Salin selepas log masuk

    style

    动态绑定行内style样式

    三种方式:html代码

          <p :>style绑定</p>
    Salin selepas log masuk
          <p :>style对象绑定(直接绑定到一个对象,代码更清新)</p>
    Salin selepas log masuk
         <p :>style数组绑定</p>
    Salin selepas log masuk

    js 代码

    const colorRed = ref(&#39;#f00&#39;)
    const styleObj = reactive({
      fontSize: &#39;30px&#39;,
    })
    const styleObjRed = reactive({
      color: &#39;#f00&#39;,
    })
    Salin selepas log masuk

    Atas ialah kandungan terperinci Apakah mata pengetahuan API biasa untuk pembangunan komponen vue3?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

    Label berkaitan:
    sumber:yisu.com
    Kenyataan Laman Web ini
    Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
    Tutorial Popular
    Lagi>
    Muat turun terkini
    Lagi>
    kesan web
    Kod sumber laman web
    Bahan laman web
    Templat hujung hadapan