错误方式1:采用provide、inject
//main.ts
import { message } from 'ant-design-vue'
app.provide('message', message);
//route/index.ts
import { MessageInstance } from "ant-design-vue/es/message";
import { message } from 'ant-design-vue'
router.beforeEach((to, from, next) => {
const message: MessageInstance = inject('message') as MessageInstance;
if (to.path == '/login') {
next()
} else {
//其他逻辑
message.info('登录过期,请重新登陆')
}
})
在某些情况中控制台会报警告,无法注入。
错误方式2:app中挂载message
//main.ts
const app = createApp(App);
app.config.globalProperties.$message = message;
//request.ts
import { getCurrentInstance } from 'vue';
client.interceptors.request.use((config: InternalAxiosRequestConfig<any>) => {
const isToken = (config.headers || {}).isToken
if (Cookies.get('accessToken') && isToken) {
config.headers['Authorization'] = Cookies.get('accessToken')
}
return config;
}, (error) => {
// 对请求错误做些什么
const { proxy } = getCurrentInstance();
//报错了………………
return Promise.reject(error);
});
报错——getCurrentInstance is null
正确方式:
//App.vue
import { message } from 'ant-design-vue';
window.$message = message //window上挂载
//ts申明window $message属性
declare global {
interface Window {
$message: MessageApi
}
}
//任何地方
window.$message.success('')
window.$message.error('')