vue3.2自定义指令语法糖+ts和!ts

简介: vue2有13种指令: v-once v-bind v-model v-if 等当这几种指令不满足自己的使用的时候可以自定义指令的*vue2指令的钩子 bind insert update component Updated unbind vue3的指令和vue2的不一致
*vue2有13种指令: v-once v-bind v-model v-if 等当这几种指令不满足自己的使用的时候可以自定义指令的vue2指令的钩子 bind insert update component Updated unbind
vue3的指令和vue2的不一致**

1.vue3的指令的钩子函数:

**created 元素初始化的时候
beforeMount指令绑定到元素后调用 只调用一次
Mounted元素插入父级Do'm调用
beforeUpdate 元素被更新之前调用
updated 在包含组件的 VNode 及其子组件的 VNode 更新后调用
beforeUnmount在元素被移除前调用
unmounted指令被移除后调用 只调用一次**

vue3的setup语法糖写法
directi.vue

<template>
    <div class="dire">
            A
    </div>
</template>

<script setup lang="ts">

</script>

<style scoped>
.dire{
    width:200px;height: 200px;border: 1px solid #000;
}
</style>
<template>
  <div> 
     <directi v-if="flag" v-move="{background:'red',flag:flag}"></directi> 
     //测试更新钩子
      <!--<directi   v-move="{background:'red',flag:flag}"></directi>-->
  </div>
</template>

<script   setup>
import  {ref} from 'vue'
import  directi from './components/directi.vue' 
const  flag=ref(true)
const vMove={
  // 初始化加载下面3
  created() {
    console.log('created')
  },
  beforeMount() {
     console.log('beforeMount')
  }, 
  mounted(el,dir) {
     console.log('mounted',dir.value.background)
    el.style.background=dir.value.background;
  },

  beforeUpdate() {
     console.log('beforeUpdate')
    
  },
  updated(){
     console.log('updated')

  },
// 销毁触发下面2
  beforeUnmount(){
     console.log('beforeUnmount')

  },
  unmounted(){
     console.log('unmounted')

  }
}
 



</script>

<style scoped>

</style>

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
VUE3+ts写法:

<template>
  <div> 
     <button @click="flag=!flag">切换</button>
     //测试显示隐藏触发的钩子
     <directi v-if="flag" v-move:aaa.xiaozhu="{background:'red',flag:flag}"></directi>
     // 测试更新触发的钩子
     <!-- <directi  v-move="{background:'red',flag:flag}"></directi> -->
    
  </div>
</template>

<script   setup lang="ts">
import  {ref,Directive, DirectiveBinding} from 'vue'
import  directi from './components/directi.vue' 
const flag=ref<Boolean>(true);
type Dir={
   background:string
}
const vMove:Directive={
  // 初始化加载下面3
  created() {
    console.log('created')
  },
  beforeMount() {
     console.log('beforeMount')
  }, 
  mounted(el:HTMLElement,dir:DirectiveBinding<Dir>) {
     console.log('mounted',dir.value.background)
    el.style.background=dir.value.background;
  },

  beforeUpdate() {
     console.log('beforeUpdate')
    
  },
  updated(){
     console.log('updated') 
  },
// 销毁触发下面2
  beforeUnmount(){
     console.log('beforeUnmount') 
  },
  unmounted(){
     console.log('unmounted') 
  }
} 
</script>

<style scoped>

</style>

自定义指令函数简写:

<template>
  <div> 
     <button @click="flag=!flag">切换</button>
     //测试显示隐藏触发的钩子
     <directi v-if="flag" v-move:aaa.xiaozhu="{background:'red',flag:flag}"></directi>
     // 测试更新触发的钩子
     <!-- <directi  v-move="{background:'red',flag:flag}"></directi> -->
    
  </div>
</template>

<script   setup lang="ts">
import  {ref,Directive, DirectiveBinding} from 'vue'
import  directi from './components/directi.vue' 
const flag=ref<Boolean>(true);
type Dir={
   background:string
}
const vMove:Directive=(el:HTMLElement,bingding:DirectiveBinding<Dir>)=>{
 el.style.background=bingding.value.background
}
 
</script>

<style scoped>

</style>
相关文章
|
3月前
|
JavaScript 前端开发 API
Vue3之script-setup 语法糖
本文介绍了Vue 3的`<script setup>`语法糖,通过示例代码演示了如何在组件中使用`<script setup>`以及相关的Vue 3 Composition API函数和特性,如响应式引用、生命周期钩子、CSS模块等,并展示了组件间的通信和样式应用。
35 0
Vue3之script-setup 语法糖
|
3月前
|
JavaScript 前端开发 API
Vue3 中 setup 语法糖做了哪些骚操作?
Vue3 中 setup 语法糖做了哪些骚操作?
|
5月前
|
JavaScript
解决vue3中不支持.sync语法糖
解决vue3中不支持.sync语法糖
430 3
|
6月前
|
JavaScript API 开发工具
Vue3甜点探秘:史上最甜的语法糖
Vue3甜点探秘:史上最甜的语法糖
49 4
|
6月前
|
JavaScript 前端开发 测试技术
vue的setup语法糖?
vue的setup语法糖?
27 1
|
6月前
|
JavaScript
Vue 使用 setup 语法糖
Vue 使用 setup 语法糖
|
6月前
|
JavaScript
vue中setup语法糖的优点
vue中setup语法糖的优点
|
6月前
|
JavaScript
vue的sync语法糖的使用
vue的sync语法糖的使用
58 0
|
6月前
|
JavaScript
什么是vue的sync语法糖如何使用
什么是vue的sync语法糖如何使用
55 0
|
6月前
|
缓存 JavaScript 前端开发
vue3 setup语法糖 搜索
vue3 setup语法糖 搜索
46 0