91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

Vue3中的setup與自定義指令如何使用

發布時間:2023-05-17 15:13:42 來源:億速云 閱讀:106 作者:zzz 欄目:編程語言

本篇內容主要講解“Vue3中的setup與自定義指令如何使用”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Vue3中的setup與自定義指令如何使用”吧!

setup語法糖

最大好處就是所有聲明部分皆可直接使用,無需return出去

注意:部分功能還不完善,如:name、render還需要單獨加入script標簽按compositionAPI方式編寫

// setup 下還可以附加<script>

setup語法糖獨有

<script setup>
import { ref ,reactive,toRefs } from 'vue'
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(['change', 'delete'])
// 自定義指令
const vMyDirective = {
  created(el, binding, vnode, prevVnode) {
    // 下面會介紹各個參數的細節
    console.log('創建了')
  },
}
</script>

defineProps defineEmits與組件應用

// 子組件
<template>
  <div class="hello">
    <h3>{{ msg }}</h3>
    <slot name="btn">
 
    </slot>
    <button @click="chickMe"></button>
  </div>
</template>
 
<script setup>
import { useSlots, useAttrs } from 'vue';
 
const slots = useSlots()
const attrs = useAttrs()
const props = defineProps({
  msg: String
})
const emit = defineEmits(['change'])
console.log(slots, attrs)
const chickMe = ()=>{
  emit('change','abc')
}
 
</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 '../components/HelloWorld.vue';
import { ref ,reactive,toRefs } from 'vue'
 const obj = reactive({
      id: 0,
      text: '小紅'
    })
 const changeP=(e)=>{
      console.log(e)
    }
</script> 
、

defineExpose與組件應用

// 子組件
<template>
  <div class="hello">
        123
  </div>
</template>
 
<script setup>
 
const testPose =()=>{
  console.log('子組件暴露方法')
}
defineExpose({
  testPose
})
</script>
 
// 父組件
<template>
  <div class="home" v-test>
    <HelloWorld  ref="helloSon"></HelloWorld>
    <button @click="testEpose"></button>
  </div>
</template>
<script setup>
import HelloWorld from '../components/HelloWorld.vue';
import { ref } from 'vue'
// setup函數的話可以從context上查找
const helloSon = ref(null);
const testEpose = () => {
  helloSon.value.testPose();
}
</script>

自定義指令相關

  • created:在綁定元素的 attribute 或事件監聽器被應用之前調用。在指令需要附加在普通的 v-on 事件監聽器調用前的事件監聽器中時,這很有用。

  • beforeMount:當指令第一次綁定到元素并且在掛載父組件之前調用。

  • mounted:在綁定元素的父組件被掛載后調用,大部分自定義指令都寫在這里。

  • beforeUpdate:在更新包含組件的 VNode 之前調用。

  • updated:在包含組件的 VNode 及其子組件的 VNode 更新后調用。

  • beforeUnmount:在卸載綁定元素的父組件之前調用

  • unmounted:當指令與元素解除綁定且父組件已卸載時,只調用一次。

import { createApp } from 'vue';
const Test = createApp();
Test.directive('my-directive', {
    // 在綁定元素的 attribute 前
    // 或事件監聽器應用前調用
    created(el, binding, vnode, prevVnode) {
        // 下面會介紹各個參數的細節
        console.log('創建了')
    },
    // 在元素被插入到 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('my-directive');
  • el:指令綁定到的元素。這可以用于直接操作 DOM。

  • binding:一個對象,包含以下屬性。

    • value:傳遞給指令的值。例如在 v-my-directive="1 + 1" 中,值是 2

    • oldValue:之前的值,僅在 beforeUpdateupdated 中可用。無論值是否更改,它都可用。

    • arg:傳遞給指令的參數 (如果有的話)。例如在 v-my-directive:foo 中,參數是 "foo"

    • modifiers:一個包含修飾符的對象 (如果有的話)。例如在 v-my-directive.foo.bar 中,修飾符對象是 { foo: true, bar: true }

    • instance:使用該指令的組件實例。dir:指令的定義對象。

  • vnode:代表綁定元素的底層 VNode。

  • prevNode:之前的渲染中代表指令所綁定元素的 VNode。僅在 beforeUpdateupdated 鉤子中可用。

應用

<template>
  <div class="home" v-test>
  </div>
</template>
//setup 外部調用
<script>
// 指令必須 vXxx 這樣書寫
import vTest from './TestDirective'
export default defineComponent({
   directives: {
      test:vTest,
    },
  setup(props) {
    // console.log('Test',vTest)
    
    return {
   
    };
  } 
})
</script>
//或者 setup內部
<script setup>
import vTest from './TestDirective'
</script>

對象字面量

<div v-demo="{ color: 'white', text: 'hello!' }"></div>
 
app.directive('demo', (el, binding) => {
  console.log(binding.value.color) // => "white"
  console.log(binding.value.text) // => "hello!"
})

到此,相信大家對“Vue3中的setup與自定義指令如何使用”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

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

AI

陈巴尔虎旗| 舒城县| 潜山县| 怀宁县| 南溪县| 甘洛县| 景宁| 长乐市| 牙克石市| 含山县| 宁晋县| 贵德县| 定安县| 台东市| 东台市| 汉中市| 汤阴县| 南投县| 长沙县| 聂拉木县| 安丘市| 宣化县| 绩溪县| 塔城市| 军事| 长治县| 威宁| 广灵县| 玉树县| 青海省| 清河县| 乌鲁木齐县| 安国市| 东丰县| 丰台区| 西吉县| 淳化县| 郯城县| 霸州市| 伊宁市| 余庆县|