NuxtJS context中常用属性

context是nuxt额外提供的对象。在asyncData,plugins,middlewares,modules,store,nuxtServerInit等特殊的nuxt生命周期区域中都会使用到context。

app

官方描述:包含所有插件的 Vue 根实例。例如:在使用 axios 的时候,你想获取 a x i o s 可 以 直 接 通 过 c o n t e x t . a p p . axios 可以直接通过 context.app. axioscontext.app.axios 来获取

  • app是context中的重要属性。类似于vue中的this。全局方法和属性都会挂载到它里面。
  • 由于服务端渲染的特殊性,很多nuxt提供的生命周期都是运行在服务端,也就是说他们会先于vue实例的创建,因此在这些生命周期中。我们无法通过this去获取实例上的方法和属性,使用app可以弥补这一点。
  • 一般我们会把全局的方法同时注入到this和app中,在服务端的声明周期中使用app去访问该数据。而在客户端中使用this。保证方法的共用

假设axios已经被注入,一般主要数据通过asyncData(该声明周期发起请求,将获取到的数据交给服务端拼接成html返回)提前请求做服务端渲染,次要数据通过vue的生命周期请求

export default {
    async asyncData({app}){
       let list = await app.$axios.getList().then(res => res.data)
       return list;
    }
    
    data(){
        return{
            list:[],
            data:[],
        }
    }
    async mounted(){
        let result = await this.$axios.getData();
        if(data.success === 200) this.data = result
    }    
}
store

官方描述:Vuex.Store 实例。只有vuex 数据流存在相关配置时可用

  • Vuex.Store 实例,运行项目时会尝试找到是应用目录下的store目录,如果该目录存在,它会将模块文件加到构建配置中。
  • 我们使用的时候可以直接在根目录下创建store文件。然后在store中写js就行。和我们在vue中使用vuex没有什么区别
// 创建state store/list.js
export const state = () =>{
    list:[],
    data:[],
}

export const motations = {
    updateList(state,payload){
        state.list = payload;
    },
    updateData(state,payload){
        state.data = payload;
    }
}

// 使用
export default {
    async asyncData({app, store}){
        let list = await app.$axios.getList().then(res=>res.data)
        store.commit('updateList',list);
        return list;
    }
    
    async mounted(){
        let result = await this.$axios.getData();
        store.commit('updateData', result);
    }
}
redirect

官方描述:用这个方法重定向用户请求到另一个路由。状态码在服务端被使用,默认 302 redirect([status,] path [, query])

  • 该方法重定向用户请求到另一个路由,通常会用在权限验证
export default function({redirect}){
    // 校验token,如果token不合格跳转到登录页面
    if(!token){
        redirect({'/login',query:{ path:'/home' }})
    }
    // 如果只是单纯的重定向路由
    redirect('/home');
}
error

官方描述:用这个方法展示错误页:error(params) 。params 参数应该包含 statusCode 和 message 字段

  • 该方法跳转到错误页
export default{
    async asyncData({app,error}){
        const list = await app.$axios.getList().then(res=>{
            if(res.code !== 200){
                error({
                    statusCode: res.code,
                    message: res.msg
                })
                return
            }else{
                return res.data;
            }
        })
        return list;
    }
}
route

官方描述:Vue Router 路由实例

export default function({ app }){
    app.$route({path:'/home',query:{id:1}})
    app.$route({name:'/home',params:{id:2}})
}
params && query

官方描述:route.params || route.query 的别名

export default{
    async asyncData({app, query, params}){
        let id = "";
        // query
        id = app.$router.query.id;
        // params 
        id = app.$route.params.id;
        
        const list = await app.$axios.getList({id})
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值