创建脚手架 vue create app

  • 1.选择第二个
  • 2.选择babel,scss,vuex,router,liner
  • 3.如果需要使用vue3 版本 cd app 下载 vue add vue-next

vuex

    1. state 存放store数据
    1. mutations 改变store数据 调用使用 $store.commit(‘函数名’,参数)
    1. actions 处理异步操作 调用使用 一般用来发起ajax请求数据 $store.dispatch(‘函数名’,参数)
    1. modules 可以让每一个模块拥有自己的state、mutation、action、getters,使得结构非常清晰,方便管理
  1. const moduleA = {
  2. state: { ... },
  3. mutations: { ... },
  4. actions: { ... },
  5. getters: { ... }
  6. }
  7. const moduleB = {
  8. state: { ... },
  9. mutations: { ... },
  10. actions: { ... }
  11. }
  12. const store = new Vuex.Store({
  13. modules: {
  14. a: moduleA,
  15. b: moduleB})
    1. getters 计算属性 在页面调用
  1. 第一步:定义
  2. getters:{
  3. zj(state){
  4. return state.list.filter(e=>e.flag).reduce((prev,next)=>{return prev + next.count*next.prc},0)
  5. },
  6. zs(state){
  7. return state.list.filter(e=>e.flag).reduce((prev,next)=>{return prev + next.count},0)
  8. }
  9. },
  10. 第二部调用
  11. <p>总价{{$store.getters.zj}}----总数{{$store.getters.zs}}</p>

指令

  • v-if 判断不符合条件不进行渲染
  • v-else
  • v-text
  • v-show 不符合条件元素display:none
  • v-for 循环遍历
  • v-model 双向绑定
  • v-bind 动态赋值 简化 :
  • v-on 事件绑定 简化@ 事件对象穿回来 $event
  1. 在事件处理程序中经常使用event.preventDefault() event.stopPropagation()
  2. Vue.js v-on 提供了事件修饰符。之前提过,修饰符是由点开头的指令后缀来表示的。
  3. .stop 阻止事件继续传播
  4. .prevent 取消默认事件
  5. .capture
  6. .self
  7. .once
  8. .passive
  9. <!-- 阻止单击事件继续传播 -->
  10. <a v-on:click.stop="doThis"></a>
  11. <!-- 提交事件不再重载页面 -->
  12. <form v-on:submit.prevent="onSubmit"></form>
  13. <!-- 修饰符可以串联 -->
  14. <a v-on:click.stop.prevent="doThat"></a>
  15. <!-- 只有修饰符 -->
  16. <form v-on:submit.prevent></form>
  17. <!-- 添加事件监听器时使用事件捕获模式 -->
  18. <!-- 即元素自身触发的事件先在此处处理,然后才交由内部元素进行处理 -->
  19. <div v-on:click.capture="doThis">...</div>
  20. <!-- 只当在 event.target 是当前元素自身时触发处理函数 -->
  21. <!-- 即事件不是从内部元素触发的 -->
  22. <div v-on:click.self="doThat">...</div>
  23. 按键码
  24. keyCode 的事件用法已经被废弃了并可能不会被最新的浏览器支持。
  25. 使用 keyCode attribute 也是允许的:
  26. <input v-on:keyup.13="submit">
  27. 为了在必要的情况下支持旧浏览器,Vue 提供了绝大多数常用的按键码的别名:
  28. .enter
  29. .tab
  30. .delete (捕获“删除”和“退格”键)
  31. .esc
  32. .space
  33. .up
  34. .down
  35. .left
  36. .right

属性

  • computed 计算属性

    -1. 不能用异步
    -2. 不能改变data的值

  • methods 事件属性

  • components 注册组件

生命周期

    1. beforeCreate 实力组件刚创建,元素和DOM数据还都没有初始化
    1. created 数据data已经初始化完成,方法已经可以调用,但是DOM未渲染,一般进行axjx请求
    1. beforeMount DOM未完成挂载,数据也初始化完成,但是数据的双向绑定还是现实{{}}
    1. mounted 数据和DOM都完成挂载,再上一个周期占位的数据把值给渲染进去,可以在这边请求,不过created会更好一些,这个生命周期适合执行初始化需要操作的DOM方法
    1. eforeUpdate 只要页面数据改变了都会触发,数据更新之前,页面数据还是原来的数据,当你请求赋值一个数据的时候会执行这个周期,数据没有改变不执行
  • 6 . updated 知道是页面数据改变了都会触发,数据更新完毕,页面的数据是更新完成的,beforeUpdate和updated要谨慎使用,因为页面数据更新都会触发,容易影响性能和死循环
    1. beforeDestroy 这个周期是在组件销毁之前执行,清除残存数据,比如:计时器
    1. Destoryed 和beforeDestroy一样
    1. activated 缓存组件激活时调用
  • 10.deactivated 缓存组件停用的调用

this.$nextTick dom加载完成触发

views 路由视图页面

router

  • 两种路由模式 history无#号 | hash后面有#号
  • 两种路由模式 history无#号 | hash后面有#号
  • redirect 重定向
  • meta 源路由
  • name:Home 可以用来重定向
  • “**”表示拦截所有页面
    1. //监视是否是404页面然后将不需要的取消展示
    2. watch:{
    3. n:{
    4. $route(n,o){
    5. n相当于变化后的新值 o是旧值
    6. },
    7. deeptrue ,深度监控
    8. immediate:true //立即监控
    9. }
    10. }

views 路由视图页面

导航守卫

  • 全局

    1. 1.创建一个Login.vue文件,并在路由json中引入
    2. 2.设置路由拦截
    3. router.beforeEach((to,from,next)=>{
    4. if(to.path === '/about'){
    5. //设置需要守卫的路径
    6. if(localStorage.getItem('token')){
    7. //获取登录令牌token有就执行,没有就跳转/login;
    8. next();
    9. }else{
    10. next('/login')
    11. }
    12. }else{
    13. next();
    14. }
    15. })
  • 前置 beforeEach

  • 后置 afterEach
  • 路由独享的守卫 beforeEnter

    1. {
    2. path:'/foo',
    3. component :Foo,
    4. beforeEnter :(to,from ,next )=>{
    5. 方法与全局前置守卫的方法参数是一样的
    6. }
    7. }
  • 组件内的守卫 ```javascript

  1. beforeRouteEnter beforeRouteEnter(to , from , next){ // 在渲染该组件的对应路由被confirm前调用 //不能获取组件实例 this //因为当守卫执行前,组件实例还没被创建 } beforeRouteUpdata(to , from ,next){

    } ```

props验证

  1. //第一种
  2. props:[]
  3. //第二种
  4. props:{
  5. title:{
  6. type:String,
  7. required:true, //为真是必须传
  8. default:'www', //默认值
  9. validator(n){//自定义验证规则
  10. return //为真就不报错为假就报错
  11. }
  12. }
  13. }

https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/4.5.0/css/bootstrap.css ul样式引入

父子传参/子父传参

  • porps
  • 子父传承 自定义函数传进来在子组件通过this.$emit(“自定义函数名”,参数);

bus

    1. 用$root.$on(‘msg’,(data)=>{})监听事件、用$root.$emit(‘msg’,’参数’)改变数据
  • 2.创建一个new Vue 的bus,用 bus.$on和bus.$emit操作数据

文字排序 localeCompare

  1. list.store((a,b)=>a.localeCompare(b));