1. 使用~可以导入node_modules中的静态文件,或则当想要使用webpack alias的时候就可以在最前面添加
- 使用 keep-alive 实现缓存
- 当使用 keep-alive 的时候需要把所有的 data 变量初始化放在 created 中
- 数据的更新请求要放在 activated 中,mounted 中最好不执行方法 ( mounted 中不要执行任何请求,因为会被 avtivated 执行两次 )
- 当需要关闭一个页面的 keep-alive 时,需要把这个页面的数据请求放到 mounted 中,实现页面的全部刷新
- 关闭 keep-alive 的方法就是添加 exclude 的值为不缓存的页面的 name
- params 和 query 传参的区别
- 使用 params 传参必须使用 name 参数 而 query 传参可以使用 path 和 name 参数
- 使用 params 参数的两种方式
- 使用动态路由匹配 例如
{path: "/test/:username/:password"}
的话显示的 url 地址为/test/dongsen/123456
- 不使用动态路由匹配的话
{path: "/test"}
,而在跳转的时候使用:to="name:"test",params:{username:dongsen,password:123456"}"
的话 url 为/test
,但是刷新页面 params 参数便会清除
- 使用动态路由匹配 例如
- 当路由的参数改变而页面不刷新问题
- 这种情况发生于,在当前页面的 query 参数触发改变的时候,因为页面是同一个所以不会触发任何生命周期方法
- 路由参数改变不会执行任何一个周期函数
- 出现 query 参数改变而且页面没有发生跳转的解决办法有两个
- 使用 watch 监听 $route 来实现数据的更新
- 使用 beforeRouteUpdate 来监听路由参数的变化
- 使用命名路由的规则
- 在使用 keep-alive 的时候每一个 keep-alive 只能包含一个 router-view
- 在使用命名路由的时候要将 components 的参数设置在 router-view 的子路由,并通过设置 router-view 的 name 参数来显示和隐藏对应的组件
- 所有的路由的 root 路由就是 app.vue,所以当要在顶级路由设置 components 的时候需要把 命名路由设置在 app.vue 中
- 每一个 router-view 只和当前的子路由有关和父级的没有关系
- 命名路由使用在当你想要同级显示多个组件的时候,例如 slideBar 的某一级需要显示的是三个组件组合的页面,就可以使用命名路由
- 可以将每个单独路由和其子路由打包成一个文件,使用的语法
import(/* webpackChunkName: "group-name" */ "@/views/ds")
- 可以在 route 中设置 props 的值
- 布尔值: true 为开启,则参数会被设置为组件的属性
- 静态值: 可以被设置为了属性 ( 其中 props 设置的值的优先级比 params 和 query 传值高 )
- 方法: 通过方法可以访问 route 的传参,并设置自定义的组件属性名
props: (route) => ({name:route.query.name})
, props 只能接受返回为对象的方法, 组件 props 参数为对象的键名 - 其中布尔值的设置目前只适用于 params 传参,也就是把 params 转化为 props
- 可以解析
~
路径 - 主要是用来处理 css 以及 @import
- 使用 px2rem 的
remUnit
参数值取决于设计稿尺寸remUnit: 75, // 1rem=75px,这里是设计稿的尺寸是750px, 这里的值的比例取决于设计稿的尺寸
- 其中如果不是移动端就要去掉
felxible.js
以及postcss-px2rem
- 全局的路由守卫,可以对所有的路由页面进行判断逻辑行为
- 通过路由的 meta 字段可以更加灵活的控制路由行为
meta: {title: '页面标题',...}
- map 方法返回的是满足条件的数组
- next(false) 可以阻止页面的跳转
- 只能通过
next(vm => vm)
来访问 this
-
可以先执行页面的跳转,在页面跳转成功后执行 created 和 mounted
-
可以在 beforeRouteEnter 中执行请求, 如果请求是同步的话, 那么页面的跳转会在请求成功后
-
页面进入的执行顺序 created -> mounted -> beforeRouteEnter( next() )
-
当使用了路由守卫函数就必须调用 next() ,否则路由跳转不会实现
-
唯一改变 state 状态的方法就是 commit mutation 方法
-
getters 中方法可以对 state 状态进行响应式, 对 state 状态进行过滤和处理但不会修改 state 状态, 其中 getters 中的方法的第二个形参为 getters 方法对象
-
state 状态参数也是响应式的, 所以需要提供默认值, 以及当需要更新状态对象为数组和对象时需要使用 Vue.set() 或则 对象展开运算符
...
-
当需要实现 mutation 方法的异步改变状态时, 可以使用 actions 实现异步的状态改变, 其中 mutations 只能同步的修改 state 状态, 异步的要放在 actions 中
-
在使用 actions 的时候可以返回一个 promise 来实现 .then 以及 async/await 等同步操作
-
对于对象, vue 无法监听对象 property 的添加或移除
-
对于数组, vue 无法监听数组的利用索引直接设置一个数组项时, 以及修改数组的长度
- axios 执行并发的方法是 axios.all([q,p]).then(axios.spread((q,p) => {})) 也就是执行完两个请求后才 .then
- 在 watch 和 computed 中定义的方法不能使用箭头函数, 因为获取不到 this 对象
- 在使用 postcss.plugins 的时候如果没有显示的 require('autoprefixer') 那么将不起作用
-
key 的作用是确保渲染的数据发生改变时, DOM 节点能够被替换, 使得 DOM 节点重新加载, 而不是仅仅只更新数据
-
is 可以把标签转译为指定的组件, 在 vue 单页面没有没有必要使用
-
在组件上可以自定义事件
v-on:your-event === @your-event
, 其中自定义事件的名字最好采取 - 命名, 其中通过 $emit() 传过来的参数可以在父组件通过 $event 拿到, 也可以通过定义 methods 方法拿到 -
子组件往父组件传的参数其实就是 $event , $event 参数默认为第一个参数, 否则需要显示的设置形参 $event
-
在子组件中使用
inheritAttrs: false
可以使子组件不会去继承没有被 props 定义的父组件自定义属性, 但是 class 和 style 没有这种限制
- 分别监听的是未被 props 显示定义的属性, 和父组件所有的绑定事件, 可以在子组件的目标节点使用
v-bind="$attrs"
来绑定属性, 可以通过v-on="$listeners"
来给目标节点绑定所有的事件
- 后备内容: 插槽的会使用所有的后备内容, 而且不会受具名插槽的影响
- 在父组件绑定 native 事件可以使子组件的能够触发父组件绑定事件
- pc 端以及响应式使用 vuetify , 移动端使用 vant
- 父组件的样式会影响子组件, 当使用了 module 就不会出现这种情况, 没有关系的页面样式不会相互影响, 但是 css module 不会去解析标签选择器, 所以尽量不要使用标签选择器, 面对父组件样式会影响子组件样式, 在所有的页面的 style 标签中使用最外层的 div 的 id 选择器包裹
- 可以作为 div 来使用
- try()catch(err){}
- 在 vue 项目中最好只使用 vue-router 来实现路由的跳转