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) // 返回接口返回的错误信息
  });

转载于:https://www.cnblogs.com/wenqiangit/p/10490443.html

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 原生的 Vue.jsElementUI.js 可以使用以下方法来实现复用 header 组件: 1. 建立一个 header 组件文件,在文件创建一个 Vue 组件,包括 template、script 和 style 三个部分。 2. 在其他组件引用这个 header 组件,可以使用 Vue组件化机制来实现。 例如,建立一个名为 Header 的组件: ``` <template> <div class="header"> <!-- header 组件的内容 --> </div> </template> <script> export default { name: 'Header', // 组件的选项 } </script> <style> /* header 组件的样式 */ </style> ``` 在其他组件引用 Header 组件: ``` <template> <div class="other-component"> <Header /> <!-- 其他组件的内容 --> </div> </template> <script> import Header from './Header.vue' export default { name: 'OtherComponent', components: { Header } } </script> ``` 这样,你就可以在其他组件复用 Header 组件了。 注意:如果你使用的是 ElementUI.js,你还需要在 main.js 导入 ElementUI,并调用 Vue.use(ElementUI) 来使用 ElementUI组件。 ### 回答2: 在原生的vue.jselementui.js,即使不使用组件的情况下,也可以实现header的复用。下面是一个可能的实现方法: 1. 首先,在vue.js的实例,定义一个header组件的对象,用于存储header的相关数据和方法。例如: ```javascript var headerComponent = { data: function() { return { headerText: 'Page Header' }; }, methods: { handleClick: function() { console.log('Clicked on header'); } }, template: ` <header> <h1>{{ headerText }}</h1> <button @click="handleClick">Click Me</button> </header> ` }; ``` 2. 在需要使用header的vue实例,通过将header组件对象添加到该实例的`components`选项,即可在模板引用header组件。例如: ```javascript new Vue({ el: '#app', components: { 'app-header': headerComponent } }); ``` ```html <div id="app"> <app-header></app-header> <!-- 页面内容 --> </div> ``` 这样,header组件就可以在多个vue实例进行复用了。可以根据具体需求,修改header组件的数据和方法,以满足不同页面的需求。 需要注意的是,以上方法并没有直接使用elementui.js,而是只使用vue.js原生的功能。如果需要进一步修改样式,可以在相应的CSS文件添加样式规则。 ### 回答3: 如果不使用组件,即只使用原生的vue.jselementui.js来实现header的复用,可以按照以下步骤进行操作: 1. 在项目创建一个单独vue组件,命名为Header.vue,该组件负责展示header的内容和样式。 2. 在Header.vue组件,可以使用elementui.js提供的组件或样式来实现header的布局和样式设计。比如可以使用el-row和el-col来进行栅格布局,使用el-menu和el-menu-item来实现菜单导航等功能。 3. 在Header.vue组件,通过vue的数据绑定和事件监听机制,可以实现header的动态展示和交互功能。比如可以通过定义data属性来动态显示登录用户信息,通过定义methods方法来响应用户点击事件。 4. 在需要使用header的页面,可以通过引入Header.vue组件来复用header。可以使用vue.js的import语句导入Header.vue组件,然后在页面使用<Header></Header>标签进行调用。 5. 在实际使用,可以通过修改Header.vue组件的props属性来实现不同页面header的差异化展示。比如可以通过props接收不同页面传递的参数,从而动态展示不同的内容和样式。 通过上述步骤,即可在原生的vue.jselementui.js实现header的复用功能。虽然没有使用组件,但是仍然可以通过vue的特性和elementui.js提供的样式和组件来实现header的灵活动态展示。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值