首页 > 其他分享 >Vue2和Vue3区别的理解和学习4-模板和语法

Vue2和Vue3区别的理解和学习4-模板和语法

时间:2024-07-08 22:25:59浏览次数:17  
标签:count Vue vue2 Vue3 Vue2 vue3 组件 模板

Vue2和Vue3区别的理解和学习4-模板和语法

组件定义

// vue2 
  export default {
    data() {
      return {
        count: 0
      }
    },
    methods: {
      increment() {
        this.count++
      }
    }
  }
vue3 --- js
import { ref } from 'vue'
export default {
  setup() {
    const count = ref(0)
    function increment() {
      count.value++
    }
    return {
      count,
      increment
    }
  }
}

vue3 --- ts
<script setup>
  import { ref } from 'vue'
  const count = ref(0)
  function increment() {
    count.value++
  }
</script>

生命周期钩子

以挂载完成为例

// vue2
export default {
  mounted() {
    console.log('Component is mounted!')
  }
}
vue3
import { onMounted } from 'vue'
export default {
  setup() {
    onMounted(() => {
      console.log('Component is mounted!')
    })
  }
}

多个根节点

Vue 3 允许在一个组件模板中有多个根节点,而不再需要一个包裹元素。这使得组件结构更加简洁。

// vue2
<template>
  <div>
    <header>Header</header>
    <main>Main content</main>
  </div>
</template>
// vue3
<template>
  <header>Header</header>
  <main>Main content</main>
</template>

自定义指令

// vue2自定义全局指令 -- main.js文件或者其他入口文件
Vue.directive('get-div', {
  bind(el, binding) {
    console.log(el, binding);
  }
});
// html
<div v-get-div="'username'"></div>
// vue3自定义全局指令 -- main.js文件或者其他入口文件
const app = createApp(App);

// 注册全局自定义指令
app.directive('get-div', (el,binding) => {
  console.log(el,binding)
});
// html
<div v-get-div="'username'"></div>

<teleport> 组件

`将一个组件内部的一部分模板“传送”到该组件的 DOM 结构外层的位置去。

在vue2中,如果想实现此功能,需要下载插件来实现。
npm install vue-teleport-component --save

// vue3
<Teleport to="body">
  <div>teleport</div>
</Teleport>

to 的值可以是一个 CSS 选择器字符串,也可以是一个 DOM 元素对象。
上面代码的意思是’把<teleport>标签中的模板片段传送到 body 标签下。

总结

Vue 3的模板语法更具可读性,‌更便于学习和使用。‌此外,‌Vue 3 还提供了全面的TypeScript类型定义库,‌使得在TypeScript项目中使用Vue.js更加轻松。‌通过使用defineComponent函数来明确声明组件的类型,‌代码的清晰度和可理解性得到了进一步提升,‌同时也可以在编译时进行类型检查,‌从而增强了代码的安全性和可维护性

标签:count,Vue,vue2,Vue3,Vue2,vue3,组件,模板
From: https://blog.csdn.net/weixin_54092687/article/details/140249090

相关文章

  • Vue3 如何接入 i18n 实现国际化多语言
    1.基本方法在Vue.js3中实现网页的国际化多语言,最常用的包是vue-i18n,通常我们会与vue-i18n-routing一起使用。vue-i18n负责根据当前页面的语言渲染文本占位符,例如:<span>{{t('Login')}}</span>当语言设置为中文时,会将Login渲染为“登录”。vue-i18n-routing负责......
  • 2024已过半,还没试过在vue3中使用ioc容器吗?
    Vue3已经非常强大和灵活了,为什么还要引入IOC容器呢?IOC容器离不开Class,那么我们就从Class谈起Class的应用场景一提起Class,大家一定会想到这是Vue官方不再推荐的代码范式。其实,更确切的说,Vue官方是不推荐基于Class来定义Vue组件。如图所示:社区确实有几款基于Clas......
  • vue3 watch使用方式,如何监听reactive子属性 ref数据等
    代码<template><divclass="box">childB</div></template><scriptlang="ts"setup>import{reactive,watch,ref}from"vue";constdata1=reactive({msg:"childB",abc:"sl......
  • vue3 defineEmits 使用
    概论defineEmits用来定义子组件暴漏给父组件的自定义事件测试代码子组件<template><divclass="box">child</div></template><scriptlang="ts"setup>interfaceEmit{(e:"emitfn1",data:Array<number>):void;......
  • vk-data-goods-sku-popup uniapp vue3示例
    效果图组件简介vk-data-goods-sku-popup是一个uniapp上面方便好用的sku组件,使用场景包括但不限于商品详情页、购物车页面、订单结算页、搜索结果页下面就上代码了,完整vue页面的代码如下<scriptsetup>import{ref,defineEmits,defineProps,computed}from'vue'//显示......
  • 前端面试题28(Vue3的Teleport功能在什么场景下特别有用?能给个例子吗?)
    Vue3的Teleport功能在需要将组件的渲染结果放置在DOM树中与当前组件位置无关的任意位置时特别有用。这通常涉及到需要将某些UI元素(如模态框、弹出菜单、通知、工具提示等)从其逻辑上的父级组件中“提取”出来,放置到页面的更高层级或完全不同的位置,以避免样式冲突或层......
  • 前端面试题27(在实际项目中,如何有效地利用Vue3的响应式系统提高性能?)
    在实际项目中,有效利用Vue3的响应式系统提高性能主要涉及以下几个关键点:1.合理使用reactive和refreactive:用于将复杂的数据结构(如对象或数组)转换成响应式版本。确保只将需要实时更新的数据结构声明为响应式,避免不必要的全局响应化,以减少性能开销。ref:用于创建基本类型......
  • tauri + vue3 如何实现在一个页面上局部加载外部网页?
    ......
  • Vue3中drawer组件无法重新回显数据
    不做drawer的时候数据是可以正常回显的,点击详情id是正常传值的,但是使用了drawer组件以后发现只会调用一次详情功能,以后不管点击哪条信息都不会刷新信息永远都是第一条的信息,但是id刷新成功了,后来发现是没有加v-if来判断drawer的打开值,如果您有一样的问题可以参考以下代码......
  • 从 0 实现一个 vue3 的权限指令 v-permission
    在开发过程中会经常遇到一些权限控制,比如路由的权限控制、按钮的权限控制......