Howee
Howee
  • 发布:2021-02-10 15:48
  • 更新:2021-02-20 10:37
  • 阅读:2647

vue/cli创建默认ts模板,改变main.ts下Vue的挂载方式后,App.vue方法没有执行

分类:uni-app

运行平台:微信小程序
ts模板的main.ts使用的挂载语句是

import Vue from 'vue'  
import App from './App.vue'  
new App().$mount()

这时编译后小程序没问题。但如果换成new Vue()的方式,或者想引入vuex或其他库的话要改成

import Vue from 'vue'  
import App from './App.vue'  
new Vue({  
    store,  
    ...App  
}).$mount()

这时当我编译时App.vue下的方法都没有执行,onLaunch(), onShow(), onHide()都失效了,当然globalData也变成空对象。
研究了一下,只发现如果App.vue里不使用Vue.extend()来export的话可以用new Vue()的方式,但这样TypeScript 不能正确推断 Vue 组件选项中的类型,this又报错了。
请教一下有解决方案吗?

2021-02-10 15:48 负责人:无 分享
已邀请:
Howee

Howee (作者)

好吧,说实话对这里没抱什么期待。自己研究了一下,既然在new Vue()时使用了展开操作符...,那么store也可以在App.vue里引入,然后main.ts里引入store挂载到全局实例上。
但是由于App的声明文件里不存在store,需要自己引用声明文件修复一下。

/// <reference path="@dcloudio/types/uni-app/app.d.ts" />  
namespace App {  
  interface AppInstance<T extends AnyObject = {}> {  
    store?: AnyObject;  
  }  
}

若是再严谨点可以引入Vuex的声明替换掉AnyObject。

该问题目前已经被锁定, 无法添加新回复