参考coderwhy的Vue教程

1. 基础语法

1. v-for

2. @click 方法不加括号

3. mustache 语法

4. v-once 只渲染一次

5. v-html 解析 html

6. v-text

7. v-pre 不渲染它及其子元素

8. v-cloak 防止浏览器显示未编译的 mustache

9. v-bind 动态绑定属性

语法糖

9.1 动态绑定 class
  1. 对象语法

  1. 数组语法

9.2 动态绑定 style

10. 计算属性

11. v-on 注意传参问题

12. v-if、v-else-if、v-else

13. v-show

例如根据登录角色权限不同而渲染不同页面,就使用 v-if。

14. v-model 双向绑定



2. 组件化开发

1. 过程:创建 - 注册 - 使用

1. 创建与注册全局或局部组件

2. 模板分离写法

2. 全局组件与局部组件

区别在于注册方式。

3. 父子组件问题

注意:下面这个例子中,vue 实例中不能直接使用子组件标签来引入子组件,因为子组件并没有在 vue 实例中注册,只注册进了父组件。子组件在注册进父组件时,就已经编译完成作为父组件的一部分了。

4. 组件的 data 域问题

注意:组件无法直接访问 vue 实例中的 data,因为组件也相当于一个 vue 实例,有自己的 data 域。并且 data 必须是一个函数,因为组件可能被多个地方引用,造成并发错误。

5. 父子组件通信

1. 父传子 props

2. 子传父 event

6. 插槽 Slot

1. 匿名插槽

如果传递了内容,<slot>中的内容将被 全部替换,否则显示插槽定义时默认的内容。

2. 命名插槽

3. 编译作用域

4. 作用域插槽

即在 Slot 上绑定一些数据,供给父组件直接使用。作用:子组件提供数据,父组件负责控制展示样式的时候可以使用。



3. 模块化开发

1. 一些导入导出写法

2. webpack

3. Vue-Cli



4. vue-router

本质:将路径和组件映射起来,路径的改变就是组件的切换。

4.1 入门

4.1.1 两种模式

4.1.2 使用步骤

4.1.3 跳转时执行 JS 代码

4.2 动态路由、懒加载

4.2.1 动态路由

传参:

<router-link :to="{path: '/applicant/companyDetail/' + item.id}"></router-link>
4.2.2 懒加载

4.3 路由嵌套

注意

  • children[ ] 内部的组件,path 不要带 /,否则 url 会映射到根路径。
  • 在组件内部使用 router-view 标签。

4.4 参数传递

4.4.1 传递参数

4.4.2 获取参数

$route 对象:封装了当前路由状态的信息。

4.5 导航守卫

作用:用来监听路由状态的切换。

如,在路由切换后,更改页面 title。

如果是 afterEach() 方法,不需要调用 next()。

4.6 keep-alive


5. Vuex

作用:响应式的状态管理,方便在多个组件间共享数据。

  1. State

就是要共享的属性。

  1. Getters

可以理解为计算属性。

  1. Mutations

更新时使用提交 Mutations 的方式。

  • 携带参数:

  • 两种提交风格

  • 响应规则

  1. Actions

  1. Module


6. axios

6.1 Promise

作用:ES6 中异步编程的一种解决方案,是 CommonJS 为异步编程设计得统一接口。

6.2 axios

注意回调。

1. 两种封装方式

方式一:传入回调方法,在封装体内部回调。

import axios from 'axios'
 
//传入回调方法
export function request(config, success, failure) {
  //创建axios实例
  const instance = axios.create({
    baseURL: 'xxx',
    method: "get",
    timeout: 5000
  })
  //发送请求
  instance(config)
    .then(res => {
      success(res);
  })
    .catch(err => {
      failure(err);
  })
}
 
//---调用---
request({
    config: {},
    success: function(res){},
    failure: function(err){}
})

方式二:直接 return,因为 axios 返回的就是一个 promise。

import axios from 'axios'
 
//可以给默认的axios实例设置default值
//注意只会在默认的axios实例生效
axios.defaults.baseURL = xxx;
axios.defaults.timeout = xxx;
 
var baseUrl = 'http://localhost/nqa';
 
export function get(config) {
  const get = axios.create({
    baseURL: this.baseURL,
    method: "get",
    timeout: 5000,
  })
  return get(config);
}
 
export function post(config) {
  const post = axios.create({
    baseURL: this.baseURL,
    method: "post",
    headers: {'Content-Type': 'application/json'},
    timeout: 5000
  })
  return post(config);
}
//---调用---
import * as req from 'network/request'
 
req.get({
    url: "/xxx"
}).then(res => {
    doSth...
}).catch(err => {
    doSth...
});
    
req.post({
    url: '/xxx',
    data: {
		key: value
    },
    headers: {
        //eg...
        'Authorization': myToken,
    }
}).then(res => {
    if (res.data.flag) {
        doSth...
    } else {
        doSth...
    }
}).catch(err => {
    doSth...
});