let's share的思考

2018-12-02  本文已影响0人  索伯列夫

解构赋值

应用:函数参数的解构赋值

function fn1({username,password}){
    console.log(username+password)
}

fn1({username: 'hua',password: '123'})

本例中:

login({commit},{username,password}){...}

权限管理

需求:页面刷新,数据都没了,登录状态也没了。

解决方法一:

在首页的组件中定义,在页面created时候,检查用户是否登录。

vuex

为什么要使用vuex

比如在我们的博客应用中,我们需要判断用户是否登录。
维护这个登录的状态,我们就使用vuex

state

我们所需要维护的数据,就在state中

在vue组件中,我们可以使用计算属性,不如store.state.count拿到vuex状态,也可以注入之后,使用this.$store

mapState函数,当一个组件需要多个状态,都用计算属性太麻烦,就可以使用辅助函数

getter

getter可以认为是state的计算属性,只用当依赖值变化,会被重新计算

mutation

如何修改state中维护的状态,就是使用mutation。
每个mutation都有事件类型和回调函数,回调函数的第一个参数是state

可以像store.commit传入额外的参数,即mutation的载荷payload

mutation必须是同步函数

action

action类似与mutation,不同点:

mapActions辅助函数

axios

我们需要将api封装下,传入路径、方法、数据,我们可以得到结果

axios.defaults.baseURL = 'https://blog-server.hunger-valley.com'
axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded'
axios.defaults.withCredentials = true

function request(url ,type='GET',data={}){
  return new Promise((resolve,reject)=>{
    let options = {
      url: url,
      method: type
    }
    if(type.toLowerCase === 'get'){
        options.params =  data
    }else{
      options.data = data
    }
    
    axios(options).then(res=>{
      if(res.data.status === 'ok'){
        resolve(res)
      }else{
        reject(res.data.msg)
      }
    })
  })
}

前三句话是全局的axios默认值

axios发送请求:

具体见文档“请求配置”,只有url是必须的。
// 发送 POST 请求

axios({
  method: 'post',
  url: '/user/12345',
  data: {
    firstName: 'Fred',
    lastName: 'Flintstone'
  }
});

// 发送 GET 请求

axios.get('/user', {
    params: {
      ID: 12345
    }
  })

等价于
axios.get('/user?ID=12345')

我们在上例中,先对请求配置做了设置,然后再去发送请求。


es6函数参数解构赋值

function move({x=1,y} = {x:1}){
    console.log(x+''+y)
}

move()  //1 undefined
move({x:3,y:1}) //3 1
move({y:1})  //1 1

这样写就是啥参数都不传的时候,默认x=1,

blog.js博客api

获取博客
获取首页博客
获取用户博客
获取博客详情
修改博客
删除博客

函数checkLogin

为什么需要检查登录。我们在组件created的时候,就需要确认,用户是否登录。
因为我们有很多组件,在每个组件加载到页面的时候,我们都是需要知道,用户的登录状态,这个登录状态信息,我们用vuex维护。

created:在实例创建完成后被立即调用。在这一步,实例已完成以下的配置:数据观测 (data observer),属性和方法的运算,watch/event 事件回调。然而,挂载阶段还没开始,$el 属性目前不可见。比如发送ajax请求。(今早的得到数据)

问题

在组件中想拿到vuex的状态,使用的方法:
把想拿到的数据,放在vuex的getters中,
我们在具体的组件中通过引入mapGetters,获取到数据。

问题promise的then,then

问题,页面刷新后,登录状态就消失。

解决,在header中,查询,用户是否登录,要是已经登录,就按照登录的要求去做。
在vuex中,设置查询函数
判断:
1.检查vuex中的登录状态,若登录,函数返回true,否则进行下一步
2.通过api接口,查询用户是否登录,得到返回值。根据返回值修改vuex状态
3.如果没有登录,返回false
4.如果已经登录,将信息提交到vuex

注册、登录、首页已经基本完了,接着完善Header

header中要显示头像,头像从哪来,我们维护到vuex中即可

导航守卫:

需求,当用户登录的时候,才能进入创建、编辑、我的,三个页面,

不加导航守卫,界面根本就不会出现这三个页面
但是当输入到url中,其实也是可以显示的,虽然毛都没有

但是我们需要,当用户没有登录的时候,只能进入到登录页面。
我们需要将路由做进一步的处理。
所以我们需要导航守卫。

vue-cli3

使用什么的看文档,遇到一个坑,本地用着好好的,发布到github上,路径全部出错。

需要配置vue.config.js

baseUrl: Vue CLI 会假设你的应用是被部署在一个域名的根路径上,例如 https://www.my-app.com/。如果应用被部署在一个子路径上,你就需要用这个选项指定这个子路径。例如,如果你的应用被部署在 https://www.my-app.com/my-app/,则设置 baseUrl 为 /my-app/。
这个值也可以被设置为空字符串 ('') 或是相对路径 ('./'),这样所有的资源都会被链接为相对路径,这样打出来的包可以被部署在任意路径,也可以用在类似 Cordova hybrid 应用的文件系统中。

上一篇 下一篇

猜你喜欢

热点阅读