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

Cara menggunakan persediaan dan arahan tersuai dalam Vue3

WBOY
Lepaskan: 2023-05-14 17:01:18
ke hadapan
1505 orang telah melayarinya

Sediakan gula sintaksis

Kelebihan terbesar ialah semua bahagian pengisytiharan boleh digunakan terus tanpa kembali

Nota: Sesetengah fungsi belum lengkap, seperti nama dan render perlu ditambah secara berasingan. Teg ditulis mengikut kaedah compositionAPI

// Anda juga boleh menambah

menyediakan gula sintaktik yang unik untuk persediaan

<script setup>
import { ref ,reactive,toRefs } from &#39;vue&#39;
const a = 1;
const num = ref(99)  // 基本数据类型
const user = reactive({ // 引用数据类型
  age:11
})
// 解构能获取响应式属性 {}解构 toRefs保留响应式
const { age } = toRefs(user)
// 导出
defineExpose({
  a
})
// props
const props = defineProps({
  foo: String
})
// 事件
const emit = defineEmits([&#39;change&#39;, &#39;delete&#39;])
// 自定义指令
const vMyDirective = {
  created(el, binding, vnode, prevVnode) {
    // 下面会介绍各个参数的细节
    console.log(&#39;创建了&#39;)
  },
}
</script>
Salin selepas log masuk

defineProps defineEmits berkaitan dengan aplikasi komponen

// 子组件
<template>
  <div class="hello">
    <h2>{{ msg }}</h2>
    <slot name="btn">
 
    </slot>
    <button @click="chickMe"></button>
  </div>
</template>
 
<script setup>
import { useSlots, useAttrs } from &#39;vue&#39;;
 
const slots = useSlots()
const attrs = useAttrs()
const props = defineProps({
  msg: String
})
const emit = defineEmits([&#39;change&#39;])
console.log(slots, attrs)
const chickMe = ()=>{
  emit(&#39;change&#39;,&#39;abc&#39;)
}
 
</script>
 
// 父组件
<template>
  <div class="home" >
    <HelloWorld msg="hello" atr="attrs" @change="changeP ">
      <template #btn>
        <div>我是 btn:{{ obj.text }}</div>
      </template>
    </HelloWorld>
  </div>
</template>
 <script setup>
import HelloWorld from &#39;../components/HelloWorld.vue&#39;;
import { ref ,reactive,toRefs } from &#39;vue&#39;
 const obj = reactive({
      id: 0,
      text: &#39;小红&#39;
    })
 const changeP=(e)=>{
      console.log(e)
    }
</script> 
、
Salin selepas log masuk

defineExpose berkaitan dengan aplikasi komponen

// 子组件
<template>
  <div class="hello">
        123
  </div>
</template>
 
<script setup>
 
const testPose =()=>{
  console.log(&#39;子组件暴露方法&#39;)
}
defineExpose({
  testPose
})
</script>
 
// 父组件
<template>
  <div class="home" v-test>
    <HelloWorld  ref="helloSon"></HelloWorld>
    <button @click="testEpose"></button>
  </div>
</template>
<script setup>
import HelloWorld from &#39;../components/HelloWorld.vue&#39;;
import { ref } from &#39;vue&#39;
// setup函数的话可以从context上查找
const helloSon = ref(null);
const testEpose = () => {
  helloSon.value.testPose();
}
</script>
Salin selepas log masuk

arahan tersuai

  • dibuat: dalam Dipanggil sebelum atribut elemen terikat atau pendengar acara digunakan. Ini berguna apabila arahan perlu dilampirkan pada pendengar acara sebelum pendengar acara v-on biasa dipanggil.

  • beforeMount: Dipanggil apabila arahan terikat pada elemen untuk kali pertama dan sebelum komponen induk dipasang.

  • dilekapkan: Dipanggil selepas komponen induk unsur terikat dipasang Kebanyakan arahan tersuai ditulis di sini.

  • beforeUpdate: Dipanggil sebelum mengemas kini VNode yang mengandungi komponen.

  • dikemas kini: Dipanggil selepas VNod komponen yang mengandungi dan VNod subkomponennya dikemas kini.

  • beforeUnmount: Dipanggil sebelum menyahlekap komponen induk unsur terikat

  • dinyahlekap: Apabila arahan dinyahlekap daripada elemen dan komponen induk telah dinyahlekap, ia hanya dipanggil sekali.

import { createApp } from &#39;vue&#39;;
const Test = createApp();
Test.directive(&#39;my-directive&#39;, {
    // 在绑定元素的 attribute 前
    // 或事件监听器应用前调用
    created(el, binding, vnode, prevVnode) {
        // 下面会介绍各个参数的细节
        console.log(&#39;创建了&#39;)
    },
    // 在元素被插入到 DOM 前调用
    beforeMount(el, binding, vnode, prevVnode) { },
    // 在绑定元素的父组件
    // 及他自己的所有子节点都挂载完成后调用
    mounted(el, binding, vnode, prevVnode) { },
    // 绑定元素的父组件更新前调用
    beforeUpdate(el, binding, vnode, prevVnode) { },
    // 在绑定元素的父组件
    // 及他自己的所有子节点都更新后调用
    updated(el, binding, vnode, prevVnode) { },
    // 绑定元素的父组件卸载前调用
    beforeUnmount(el, binding, vnode, prevVnode) { },
    // 绑定元素的父组件卸载后调用
    unmounted(el, binding, vnode, prevVnode) { }
})
 
export default Test.directive(&#39;my-directive&#39;);
Salin selepas log masuk
  • el: Elemen yang arahan itu terikat. Ini boleh digunakan untuk memanipulasi DOM secara langsung.

  • binding: Objek yang mengandungi sifat berikut.

    • value: Nilai diserahkan kepada arahan. Contohnya dalam v-my-directive="1 + 1" nilainya ialah 2.

    • oldValue: Nilai sebelumnya, hanya tersedia dalam beforeUpdate dan updated . Ia tersedia sama ada nilai berubah atau tidak.

    • arg: Parameter diserahkan kepada arahan (jika ada). Contohnya, dalam v-my-directive:foo, parameternya ialah "foo".

    • modifiers: Objek yang mengandungi pengubah suai (jika ada). Contohnya, dalam v-my-directive.foo.bar , objek pengubah suai ialah { foo: true, bar: true }.

    • instance: Contoh komponen menggunakan arahan ini. dir: Objek definisi arahan.

  • vnode: mewakili VNod asas unsur terikat.

  • prevNode: VNod yang mewakili elemen yang arahan terikat dalam pemaparan sebelumnya. Hanya tersedia dalam cangkuk beforeUpdate dan updated.

Aplikasi

<template>
  <div class="home" v-test>
  </div>
</template>
//setup 外部调用
<script>
// 指令必须 vXxx 这样书写
import vTest from &#39;./TestDirective&#39;
export default defineComponent({
   directives: {
      test:vTest,
    },
  setup(props) {
    // console.log(&#39;Test&#39;,vTest)
    
    return {
   
    };
  } 
})
</script>
//或者 setup内部
<script setup>
import vTest from &#39;./TestDirective&#39;
</script>
Salin selepas log masuk

Objek literal

<div v-demo="{ color: &#39;white&#39;, text: &#39;hello!&#39; }"></div>
 
app.directive(&#39;demo&#39;, (el, binding) => {
  console.log(binding.value.color) // => "white"
  console.log(binding.value.text) // => "hello!"
})
Salin selepas log masuk

Atas ialah kandungan terperinci Cara menggunakan persediaan dan arahan tersuai dalam 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