Vue在單獨引入js文件中使用ElementUI的組件


Vue在單獨引入js文件中使用ElementUI的組件

問題場景:

我想在vue中的js文件中使用elementUI中的組件,因為我在main.js中引入了element包和它的css,並掛載到了全局vue實例中。然后我就在js文件中這樣使用

this.$notify({
          title: "失敗",
          message: "請先登錄老鐵~",
          type: "error"
        });

結果報錯了,報錯信息如下

TypeError: _this.$notify is not a function
    at index.js:44

2019-03-26更新

import axios from 'axios'
// 注意:在js文件中使用element組件 按照下面更優雅哦~~
import {
    Message,
    MessageBox
} from 'element-ui'
import store from '../store'
import {
    getToken
} from '@/utils/auth'

// 創建axios實例
const service = axios.create({
    baseURL: process.env.BASE_API, // api 的 base_url
    timeout: 5000 // 請求超時時間
})

// request攔截器
service.interceptors.request.use(
    config => {
        if (store.getters.token) {
            config.headers['X-Token'] = getToken() // 讓每個請求攜帶自定義token 請根據實際情況自行修改
        }
        return config
    },
    error => {
        // Do something with request error
        console.log(error) // for debug
        Promise.reject(error)
    }
)

// response 攔截器
service.interceptors.response.use(
    response => {
        /**
         * code為非20000是拋錯 可結合自己業務進行修改
         */
        const res = response.data
        if (res.code !== 20000) {
            Message({
                message: res.message,
                type: 'error',
                duration: 5 * 1000
            })

            // 50008:非法的token; 50012:其他客戶端登錄了;  50014:Token 過期了;
            if (res.code === 50008 || res.code === 50012 || res.code === 50014) {
                MessageBox.confirm(
                    '你已被登出,可以取消繼續留在該頁面,或者重新登錄',
                    '確定登出', {
                        confirmButtonText: '重新登錄',
                        cancelButtonText: '取消',
                        type: 'warning'
                    }
                ).then(() => {
                    store.dispatch('FedLogOut').then(() => {
                        location.reload() // 為了重新實例化vue-router對象 避免bug
                    })
                })
            }
            return Promise.reject('error')
        } else {
            return response.data
        }
    },
    error => {
        console.log('err' + error) // for debug
        Message({
            message: error.message,
            type: 'error',
            duration: 5 * 1000
        })
        return Promise.reject(error)
    }
)

export default service


解決:

在該js文件中

//1.引入vue
import Vue from 'vue';
//2.新創建一個vue實例
let v = new Vue();
//3.在新的實例上使用組件
  v.$notify.error({
    title: '錯誤',
    message: '未登錄 或者token過期'
  });

附上我的全局攔截器

axios/index.js

//引入vue
import Vue from 'vue';
import axios from 'axios';
//新創建一個vue實例
let v = new Vue();
//全局狀態控制引入
import store from '../store/store';

import * as types from '../store/mutation-types';
import router from '../router'

// http request 攔截器
axios.interceptors.request.use(
  config => {
    if (store.state.userInfo.token) { // 判斷是否存在token,如果存在的話,則每個http header都加上token
      config.headers.Authorization = `JWT ${store.state.userInfo.token}`;
    }
    // config.headers.imooc = `5429026`;
    return config;
  },
  err => {
    return Promise.reject(err);
  });


// http response 攔截器
axios.interceptors.response.use(
  undefined,
  error => {
    let res = error.response;
    switch (res.status) {
      case 401:
        // 返回 401 清除token信息並跳轉到登錄頁面
        // store.commit(types.LOGOUT);
        //router.replace({
        //  path: '/app/login',
        //  query: {redirect: router.currentRoute.fullPath}
        //})
        console.log('未登錄 或者token過期');
        this.$notify({
          title: "失敗",
          message: "請先登錄老鐵~",
          type: "error"
        });
      case 403:
        console.log('您沒有該操作權限');
        // alert('您沒有該操作權限');
      case 500:
        console.log('服務器錯誤');
        // alert('服務器錯誤');
    }
    return Promise.reject(error.response.data) // 返回接口返回的錯誤信息
  });


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM