Vue核心知识点

  • 格式:pdf
  • 大小:196.75 KB
  • 文档页数:11

Vue核⼼知识点

⼀、vue.config.js 基本配置

module.exports = {

// 基本路径 cli3.3以前版本⽤baseUrl

publicPath: '/',

// 输出⽂件⽬录

outputDir: 'dist',

// ⽤于嵌套⽣成的静态资源

assetsDir: '',

// ⽣产环境sourMap

productionSourceMap: false,

// webpack配置

configureWebpack: () => {},

chainWebpack: () => {},

// css相关配置

css: {

// 启动css modules

modules: false,

// 是否使⽤css分离插件

extract: true,

// 开启 css sourcemaps?

sourceMap: false,

// css 预处理器配置项

loaderOptions: {}

},

// webpack-dev-server 相关配置

devServer: {

host: '0.0.0.0',

port: 8080,

proxy: {} // 设置代理

},

// 第三⽅插件配置

pluginOptions: {

// ...

}

}

⼆、vue组件间传值

1. ⽗⼦组件传值

(1) props(⽗传⼦) / $emit(⼦传⽗)

(2) $parent / $children

// App => Father => Child

// Father.vue

mounted () {

console.log(this.$children[0].val) // 访问⼦组件 Child 的某个数据(⼦传⽗)

console.log(this.$parent.val) // 访问⽗组件 App 的某个数据(⽗传⼦)

console.log(this.$parent.handleClick) // 也可以是某个⽅法

}

(3) $refs(访问具体DOM节点)

ref 后⾯⾃定义节点名称,从⽽实现在 js 中访问,访问的⽅式是 this.$refs.⾃定义名称 。

// Father.vue

mounted () {

console.log(this.$refs.child)

}

2. ⾮⽗⼦组件传值

(1) 事件总线

原理:建⽴⼀个公有的 js ⽂件,专门来传递消息。

// 在 util ⽂件夹下新建 bus.js

import Vue from 'vue'

export default new Vue()

// 在需要传递消息或者接收消息的地⽅引⼊

import bus from './bus.js'

// 点击事件中传递⾃定义事件,发送消息

bus.$emit('msg', val)

// 监听事件,接收消息

bus.$on('msg', val => {

console.log(val)

})

(2) $attrs / $listeners爷传孙:$attrs 将⽗组件中不包含 props 的属性传⼊⼦组件,通常配合 inheritAttrs 选项⼀起使⽤。

// 祖孙组件传值 App => Father => Child

// App.vue 绑定属性将祖辈组件中 msg、title 传递给⽗组件

// Father.vue 在⽗组件上绑定 v-bind="$attrs"

// Child.vue 孙⼦组件获取到祖⽗组件的数据

mounted () {

console.log(this.$attrs)

}

$listeners 监听⼦组件中数据变化,传递给⽗组件。(略)

(3) vuex

见第四章、第五章

三、Vue Router

1. 路由的基本配置

(1) router 配置(路由懒加载)

// index.js

import Vue from 'vue'

import VueRouter from 'vue-router'

Vue.use(VueRouter)

const router = new VueRouter({

routes: [

{

path: '/home',

name: 'home',

component: () => import('../components/Home.vue') // 懒加载:动态导⼊,按需加载

}

]

})

export default router

(2) 路由视图

App.vue,在合适的位置加上以下代码:

2. 路由的跳转

(1) router-link

跳转

(2) 编程式导航 this.$router.push( { ... } )

js 跳转

methods: {

handleGo () {

this.$router.push({

path: 'home'

})

},

// handleGo () {

// this.$router.push({

// name: 'home'

// })

// }

}

3. 动态路由

(1) 基本配置

// router ⽬录下的 index.js

import Vue from 'vue'

import VueRouter from 'vue-router'

Vue.use(VueRouter)

const router = new VueRouter({

routes: [

{

path: '/home/:id', // 动态路由,id 是⾃定义的参数名

name: 'home',

component: () => import('../components/Home.vue')

} ]

})

export default router

通过 $route.params.动态参数名 可以访问到动态参数:

路由动态参数:{{$route.params.id}}

(2) 编程式导航的传参

传参有两种形式,

⼀种是查询字段的传参。(path + query)

// App.vue (path + query)

methods: {

handleGo () {

this.$router.push({

path: 'home',

query: {

name: 'jack',

gender: 'male',

age: 18

}

})

}

}点击跳转按钮后,数据被传递到了 url 中:

⼀种是动态路由参数的传参。(name + params)

// App.vue (name + params)

methods: {

handleGo () {

this.$router.push({

name: 'home',

params: {

id: 123

}

})

}}

4. 嵌套路由

在 Home 页的⼀个区域显⽰⼀个路由页⾯,这个新的路由页⾯属于 home 路由,因此就要将它写在home路由规则下。

Home.vue

|- Child.vue

(1) 路由规则配置

在 home 路由下添加 children 选项,配置新的路由规则。

import Vue from 'vue'

import VueRouter from 'vue-router'

Vue.use(VueRouter)

const router = new VueRouter({

routes: [

{

path: '/home/:id',

name: 'home',

component: () => import('../components/Home.vue'),

children: [ // 新路由 Child.vue 写在 children 选项下

{

path: '/child',

component: () => import('../components/Child.vue')

}

]

}

]

})

export default router