Jadual Kandungan
Mula
Masalah
Penyelesaian
Rumah hujung hadapan web View.js Bagaimana untuk memantau perubahan slot Vue? Cuba helah ini!

Bagaimana untuk memantau perubahan slot Vue? Cuba helah ini!

Sep 28, 2022 pm 07:52 PM
vue vue.js vue3 slot

Bagaimana untuk memantau perubahan slot Vue? Artikel berikut akan memperkenalkan kepada anda cara memantau perubahan dalam slot Vue, saya harap ia akan membantu anda!

Bagaimana untuk memantau perubahan slot Vue? Cuba helah ini!

Baru-baru ini, saya perlu mengemas kini keadaan komponen apabila kandungannya (slot, subkomponen, dll.) berubah. Untuk konteks, ia merupakan komponen borang yang menjejaki status kesahihan inputnya.

Coretan kod di bawah ditulis dalam Options format API, tetapi boleh digunakan dalam kedua-dua Vue2 dan Vue2 kecuali yang dinyatakan. [Cadangan berkaitan: tutorial video vuejs]

Mula

Mulakan dengan mengawal status borang, ubah suai kelas mengikut status dan gunakan kandungan kanak-kanak<slot/>Padding:

<template>
  <form :class="{ &#39;--invalid&#39;: isInvalid }">
    <slot />
  </form>
</template>

<script>
export default {
  data: () => ({
    isInvalid: false,
  }),
};
</script>
Salin selepas log masuk

Untuk mengemas kini atribut isInvalid, kami perlu menambah peristiwa yang dicetuskan Anda boleh menggunakan acara sumit, tetapi saya lebih suka menggunakan input acara.

7 acara bentuk: fokus, kabur, input, pilih, tukar, tetapkan semula, serahkan, dll. Untuk penjelasan terperinci, sila baca artikel ini: https://blog.csdn.net /qq_4379 ...

Borang tidak akan memadamkan acara input, tetapi kita boleh menggunakan "wakil acara". Kami melampirkan pendengar pada elemen induk (<form>) dan ia akan dicetuskan apabila peristiwa berlaku pada elemen anaknya (<input>, <select>, <textarea>, dsb.).

Bila-bila masa acara <slot> dicetuskan dalam input komponen ini, borang akan menangkap acara tersebut.

<template>
  <form :class="{ &#39;--invalid&#39;: isInvalid }" @input="validate">
    <slot />
  </form>
</template>

<script>
export default {
  data: () => ({
    isInvalid: false,
  }),
  methods: {
    validate() {
      // 验证逻辑
    }
  }
};
</script>
Salin selepas log masuk

Logik pengesahan boleh menjadi mudah atau kompleks. Untuk tujuan tunjuk cara, artikel ini menggunakan kaedah mudah untuk menggunakan API form.checkValidity() untuk menyemak sama ada borang itu sah berdasarkan atribut pengesahan HTML.

untuk mengakses elemen <form>. Anda boleh menggunakan atribut refs atau $el. Untuk memudahkan, artikel ini menggunakan $el.

<template>
  <form :class="{ &#39;--invalid&#39;: isInvalid }" @input="validate">
    <slot />
  </form>
</template>

<script>
export default {
  data: () => ({
    isInvalid: false,
  }),
  methods: {
    validate() {
      this.isInvalid = !this.$el.checkValidity()
    }
  }
};
</script>
Salin selepas log masuk

Masalah

Ada sedikit masalah di sini. Apakah yang berlaku jika kandungan borang berubah? Apakah yang berlaku jika <input> ditambahkan pada DOM pada pemuatan borang?

Sebagai contoh, kami memanggil komponen borang ini "MyForm" Dalam Apl, kandungannya adalah seperti berikut:

// App.vue
<template>
  <MyForm>
    <input
      v-model="showInput"
      id="toggle-name"
      name="toggle-name"
      type="checkbox"
    />
    <label for="toggle-name">显示其它 input</label> 

    <template v-if="showInput">
      <label for="name">Name:</label>
      <input id="name" name="name" required />
    </template>

    <button type="submit">提交</button>
  </MyForm>
</template>

<script>
import Form from "./components/form.vue";
export default {
  name: "App",
  components: {
    MyForm: Form,
  },
  data: () => ({
    showInput: false,
  }),
};
</script>
Salin selepas log masuk

Apabila App.vue menyembunyikan dan memaparkan <🎜 tertentu melalui syarat >. , borang kita perlu tahu. Dalam kes ini, kami akan memikirkan untuk menjejaki kesahihan kandungan borang apabila ia berubah, bukan hanya pada input peristiwa atau input cangkuk kitaran hayat. Jika tidak, maklumat yang salah mungkin dipaparkan. mounted

Rakan yang biasa dengan cangkuk kitaran hayat Vue mungkin terfikir untuk menggunakan

untuk menjejaki perubahan. Secara teori, ini kedengaran hebat. Dalam amalan, ia mencipta gelung tak terhingga dan pelayar hang. update

Penyelesaian

Selepas beberapa penyelidikan dan ujian, penyelesaian terbaik ialah menggunakan API

. Ia ialah kaedah terbina dalam penyemak imbas yang menyediakan keupayaan untuk memantau perubahan pada pepohon DOM API ini boleh dimaklumkan jika nod ditambahkan atau dialih keluar, perubahan atribut atau perubahan kandungan teks. MutationObserver

Ia adalah kaedah asli, jadi ia tidak terhad kepada rangka kerja. Apabila menggunakan

, mula-mula gunakan pembina

untuk mencipta tika pemerhati baharu dan nyatakan fungsi panggil balik tika ini. Dipanggil selepas setiap perubahan DOM, panggilan balik ini dipanggil. Fungsi panggil balik menerima dua parameter, yang pertama ialah tatasusunan perubahan, dan yang kedua ialah contoh pemerhati Tulis semula komponen MutationObserver kami seperti berikut: form

<template>
  <form :class="{ &#39;--invalid&#39;: isInvalid }" @input="validate">
    <slot />
  </form>
</template>

<script>
export default {
  data: () => ({
    isInvalid: false,
  }),
  mounted() {
    const observer = new MutationObserver(this.validate);
    observer.observe(this.$el, {
      childList: true,
      subtree: true,
    });
    this.observer = observer;
  },
  methods: {
    validate() {
      this.isInvalid = !this.$el.checkValidity();
    },
  },
  beforeUnmount() {
    this.observer.disconnect();
  },
};
</script>


<style scoped>
</style>
Salin selepas log masuk
Anda juga perlu menggunakan

kitaran hayat di sini. acara untuk memutuskan sambungan beforeUnmount, yang mengosongkan sebarang memori yang diperuntukkan. observer

Akhir sekali, kami menghantar keadaan

ke slot pemalam kandungan yang ingin kami akses. Ini juga dipanggil slot skop dan sangat berguna. isInvalid

<template>
  <form :class="{ &#39;--invalid&#39;: isInvalid }" @input="validate">
    <slot v-bind="{ isInvalid }" />
  </form>
</template>

<script>
export default {
  data: () => ({
    isInvalid: false,
  }),
  mounted() {
    const observer = new MutationObserver(this.validate);
    observer.observe(this.$el, {
      childList: true,
      subtree: true,
    });
    this.observer = observer;
  },
  methods: {
    validate() {
      this.isInvalid = !this.$el.checkValidity();
    },
  },
  beforeUnmount() {
    this.observer.disconnect();
  },
};
</script>
Salin selepas log masuk
Dengan persediaan ini, kami boleh menambah sebarang bilangan

pada komponen borang kami dan menambah sebarang logik pemaparan bersyarat yang diperlukan. Selagi atribut pengesahan HTML input digunakan, borang akan menjejaki sama ada ia berada dalam keadaan sah. input

Selain itu, memandangkan kami menggunakan slot berskop, kami memberikan keadaan borang kepada ibu bapa, supaya ibu bapa boleh bertindak balas terhadap perubahan dalam kesahihan.

Contohnya, dalam

, kita nak "disable" butang submit bila borang tak sah, kita boleh tulis macam ni App.vue

<template>
  <MyForm>
    <template slot:default="form">
      <label for="name">Name:</label>
      <input id="name" name="name" required>

      <button
        type="submit"
        :class="{ disabled: form.isInvalid }"
      >
        Submit
      </button>
    </template>
  </MyForm>
</template>
Salin selepas log masuk
bagus~.

Semoga artikel ini dapat membantu untuk perkembangan masa depan anda.

(Belajar perkongsian video: pembangunan bahagian hadapan web, Video pengaturcaraan asas)

Atas ialah kandungan terperinci Bagaimana untuk memantau perubahan slot Vue? Cuba helah ini!. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Vue.js vs React: Pertimbangan khusus projek Vue.js vs React: Pertimbangan khusus projek Apr 09, 2025 am 12:01 AM

Vue.js sesuai untuk projek kecil dan sederhana dan lelaran yang cepat, sementara React sesuai untuk aplikasi besar dan kompleks. 1) Vue.js mudah digunakan dan sesuai untuk situasi di mana pasukan tidak mencukupi atau skala projek kecil. 2) React mempunyai ekosistem yang lebih kaya dan sesuai untuk projek dengan prestasi tinggi dan keperluan fungsional yang kompleks.

Cara menambah fungsi ke butang untuk vue Cara menambah fungsi ke butang untuk vue Apr 08, 2025 am 08:51 AM

Anda boleh menambah fungsi ke butang VUE dengan mengikat butang dalam templat HTML ke kaedah. Tentukan kaedah dan tulis logik fungsi dalam contoh Vue.

Cara menggunakan bootstrap di vue Cara menggunakan bootstrap di vue Apr 07, 2025 pm 11:33 PM

Menggunakan bootstrap dalam vue.js dibahagikan kepada lima langkah: Pasang bootstrap. Import bootstrap di main.js. Gunakan komponen bootstrap secara langsung dalam templat. Pilihan: Gaya tersuai. Pilihan: Gunakan pemalam.

Cara merujuk fail js dengan vue.js Cara merujuk fail js dengan vue.js Apr 07, 2025 pm 11:27 PM

Terdapat tiga cara untuk merujuk kepada fail JS dalam vue.js: Secara langsung tentukan jalan menggunakan & lt; skrip & gt; tag ;; import dinamik menggunakan cangkuk kitaran hayat yang dipasang (); dan mengimport melalui Perpustakaan Pengurusan Negeri VUEX.

Cara Menggunakan Watch di Vue Cara Menggunakan Watch di Vue Apr 07, 2025 pm 11:36 PM

Pilihan Watch di Vue.js membolehkan pemaju mendengar perubahan dalam data tertentu. Apabila data berubah, tontonkan mencetuskan fungsi panggil balik untuk melakukan paparan kemas kini atau tugas lain. Pilihan konfigurasinya termasuk segera, yang menentukan sama ada untuk melaksanakan panggilan balik dengan serta -merta, dan mendalam, yang menentukan sama ada untuk mendengarkan secara rekursif terhadap objek atau tatasusunan.

Apakah yang dimaksudkan dengan pembangunan Vue Multi-Page? Apakah yang dimaksudkan dengan pembangunan Vue Multi-Page? Apr 07, 2025 pm 11:57 PM

Pembangunan pelbagai halaman Vue adalah cara untuk membina aplikasi menggunakan rangka kerja VUE.JS, di mana permohonan dibahagikan kepada halaman berasingan: Penyelenggaraan kod: Memisahkan aplikasi ke dalam beberapa halaman boleh menjadikan kod lebih mudah untuk dikendalikan dan diselenggarakan. Modularity: Setiap halaman boleh digunakan sebagai modul yang berasingan untuk penggunaan semula dan penggantian mudah. Routing mudah: Navigasi antara halaman boleh diuruskan melalui konfigurasi penghalaan mudah. Pengoptimuman SEO: Setiap halaman mempunyai URL sendiri, yang membantu SEO.

Cara kembali ke halaman sebelumnya oleh Vue Cara kembali ke halaman sebelumnya oleh Vue Apr 07, 2025 pm 11:30 PM

Vue.js mempunyai empat kaedah untuk kembali ke halaman sebelumnya: $ router.go (-1) $ router.back () menggunakan & lt; router-link to = & quot;/& quot; Komponen Window.History.Back (), dan pemilihan kaedah bergantung pada tempat kejadian.

Cara Menanyakan Versi Vue Cara Menanyakan Versi Vue Apr 07, 2025 pm 11:24 PM

Anda boleh menanyakan versi VUE dengan menggunakan Vue Devtools untuk melihat tab VUE dalam konsol penyemak imbas. Gunakan NPM untuk menjalankan arahan "NPM LIST -G VUE". Cari item VUE dalam objek "Dependencies" fail Package.json. Untuk projek Vue CLI, jalankan perintah "Vue -version". Semak maklumat versi di & lt; skrip & gt; Tag dalam fail HTML yang merujuk kepada fail VUE.

See all articles