• Vuex与Vue-router的使用


    Vuex的使用

            在Vue中实现集中式状态(数据)管理的一个Vue插件,对vue应用中多个组件的共享状态进行集中式的管理(读/写),也是一种组件间通信的方式,用于任意组件间的通信

    state:存储数据的地址

    actions:中转站,可发送异步请求增加判断

    mutations:真正改state数据的地方

    " role="presentation" style="position: relative;"> Vuex的使用流程

    - 第一步:在state中定义变量

    - 第二步:在组件中通过 this.$store.dispatch('actions中定义的函数'),触发actions中得函数执行

    - 第三步:在actions中的函数中,调用context.commit('mutations中定义的函数')

    - 第四步:在mutations中定义的函数实现真正的修改state中的数据

    - 第五步:页面中只要使用$store.state.变量,变量变化,页面就变化 实现了组件间的通信

     ⚠️ 注意点:

            - 在组件中可以直接调用commit触发(mutations中定义的函数)

            - 在组件中可以直接修改state中定义变量

    " role="presentation" style="position: relative;"> Vuex的执行流程图

     执行流程:

            - 用户进行操作,通过dipatch提交一个actions

            - actions接收到这个事件之后,在actions中可以执行一些异步或者同步操作,然后根据不同的情况去分发给不同的mutations

            - actions通过commit去触发mutations

            - 最后mutations去更新state数据值,state更新之后,就会通知vue渲染页面并显示

    " role="presentation" style="position: relative;"> Vuex伪代码

    1. export default new Vuex.Store({
    2. state:{
    3. // 存放真正的变量,也就是数据
    4. },
    5. mutations:{
    6. // 修改state的数据操作
    7. },
    8. actions:{
    9. // 可以进行异步同步请求,校验权限等操作
    10. }
    11. })

    Vue-router的使用

            官方提供的用来实现SPA 的vue插件,有了它以后我们可以写很多页面组件,通过地址栏路径的不同来显示不同的页面组件

    " role="presentation" style="position: relative;"> 基本使用流程

    -  安装插件:

    cnpm install vue-router@4

    - 在src目录下新建router文件夹内再创index.js文件用来存放路由

    - 在index.js中引入插件

    1. import Vue from 'vue'//引入vue
    2. import VueRouter from 'vue-router'//引入vue-router路由模块
    3. Vue.use( VueRouter ) //使用vue-router这个第三方插件

    - 创建了一个router对象实例并导出

    1. const routes = [
    2. {
    3. path: '/',
    4. name: 'home',
    5. component: Home
    6. },
    7. ]
    8. export default router //导出

    - 入口文件main.js中引入路由实例 router

    1. new Vue({
    2. router,
    3. render: h => h(App)
    4. }).$mount('#app')

    - 在App.vue中用一个 router-view 的组件来给路由一个展示区域

    " role="presentation" style="position: relative;"> 路由的跳转

    - 在html中使用

    router-link组件:可以在不重新加载页面的情况下更改URl处理URl的生成以及编码

    to:来指定跳转的链接

    1. <div id ="app">
    2. <p>
    3. <router-link to="/home">首页router-link>
    4. p>
    5. div>

    - 在js中使用

    当需要先进行权限判断的时候需要在js中进行跳转,校验通过跳转删除校验不通过跳转到登陆

    1. export default {
    2. Todel() {
    3. if (usernane) {
    4. this.$router.push('/del')
    5. }else{
    6. this.$router.push('/login')
    7. }
    8. }
    9. }

    " role="presentation" style="position: relative;"> 携带参数的路由跳转

    - 在请求地址中带参数

    1. <div id ="app">
    2. <p>
    3. <router-link to="/login/?username=abc&password=123">用户登陆router-link>
    4. p>
    5. div>

    在跳转页面的组件中接受:

    1. this.$route.query.username
    2. this.$route.query.password

    - 在地址中带参数

    1. <div id ="app">
    2. <p>
    3. <router-link to="/bookList/1">展示书籍router-link>
    4. p>
    5. div>

    在跳转页面的组件中接受:

    this.$route.params.

    " role="presentation" style="position: relative;"> 路由嵌套

    关键字:children

    在router/index.js相应的路由中通过关键字进行路由的嵌套

    1. const routes = [
    2. {
    3. path: '/login',
    4. name: 'login',
    5. component: Login,
    6. children: [
    7. {
    8. name: 'books',
    9. path: 'books',
    10. component: Books
    11. },
    12. ]

    ⚠️ 注意点:

            - 必须要在Login组件中加用来渲染子路由

            - 只会变更login下router-view包裹的位置

    " role="presentation" style="position: relative;"> 路由守卫

    - 前置路由守卫:有时候根据用户的权限区分普通用户访问的接口与超级用户才能访问的接口,设置守卫来区分

    1. router.beforeEach((to, from, next) => {
    2. console.log('前置路由守卫', to, from)
    3. if (to.name == 'shoppingcart') {
    4. let name = localStorage.getItem('name')
    5. if (name) {
    6. next()
    7. } else {
    8. alert('不好意思没有权限')
    9. }
    10. } else {
    11. next()
    12. }
    13. })

    - 后置路由守卫:用来设置跳转后页面标题的名字,根据页面组件名字设置页面名

    1. router.afterEach((to,from)=>{
    2. console.log('后置路由守卫',to,from)
    3. document.title = to.name
    4. })

  • 相关阅读:
    OpenMP入门
    QOS功能介绍
    Android源码设计模式探索与实战【适配器模式】
    02-在蓝图中使用UObeject UE4 C++
    摸鱼也摸鱼之点灯游戏自动求解
    统计学-双变量相关分析-相关系数、相关比、克莱姆相关系数
    Java 蓝桥杯校赛 谁最长?
    Intel base instruction -- cpuid
    iPayLinks艾贝盈上线委托换汇功能!
    读书笔记---蛤蟆先生去看心理医生
  • 原文地址:https://blog.csdn.net/weixin_52596593/article/details/127633393