最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • vue2项目升级至vue3踩坑

    正文概述 掘金(白房子)   2021-04-02   854

    最近学习TS中,借这个机会用vue3+ts重构了之前的后台模板,对于升级过程中遇到的问题做一些简单的记录

    vue2版项目源码:github.com/BaiFangZi/v…

    vue3+ts版项目源码:github.com/BaiFangZi/v…

    项目预览地址:baifangzi.gitee.io/vue-antd-ma…

    路由通配符*

    • vue2

      {
          path: '*',
          name: 'NotFound',
          redirect: '/404NotFound',
      }
      
    • vue3

        {
          path: '/:pathMatch(.*)*',
          name: 'NotFound',
          redirect: '/404NotFound',
        },
      

    路由与vuex

    • vue2

      this.$router.push()
      this.$route.path
      this.$store.commit()
      
    • vue3

      setup(){
          const store =useStore()
          const router =useRouter()
          const route =useRoute()
          router.push()
          route.path
          store.commit()
          
      }
      

    路由缓存

    • vue2

      <keep-alive>
          <router-view> </router-view>
      </keep-live>
      
    • vue3使用了动态组件和插槽

      <router-view v-slot="{ Component }">
          <keep-alive :exclude="excludeRouter">
              <component :is="Component" />
          </keep-alive>
      </router-view>
      

    Echart全局挂载

    • vue3提供一个全局api globalProperties\

      //挂载
      app.config.globalProperties.$echarts = Echarts
      //使用
      const { ctx } = getCurrentInstance()
      chart = ctx.$echarts.init(chartDom)
      
      

    自动导包

    • vue3中vite不支持require,通过import.meta来替换

      const directives: DirectiveType = {}
      
      const modules = import.meta.globEager('./modules/*.ts')
      // modules.
      for (let key in modules) {
        const moduleName = key.replace(/\.\/modules\/(.+)\.ts/, '$1')
        directives[moduleName] = modules[key].default
      }
      

    watch

    • vue2中一个watch里面可以监听多个属性

    • vue3中一个watch监听一个属性

      const state =reactive({
          count:0
      })
      watch(
          ()=>state.count,
          ()=>{
              .....
          },
          {
              immediate: true,
              deep:true
          }
      )
      

    更多用法可参考:www.cnblogs.com/baifangzi/p…

    emit

    • vue3中只保留了emit,去除了$on等api

      export default defineComponent({
          emits:['search'],
          setup(_,{emit}){
              const handleSearch = () => {
                  if (!state.searchValue.trim()) return false
                  emit('search', state.searchValue)
              }
          }
      })
      

    自定义指令

    vue3中更改了自定义指令的生命周期


    起源地下载网 » vue2项目升级至vue3踩坑

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元