前端之路--vue学习总结(vue-router)

vue-router

Vue Router 是 Vue.js 官方的路由管理器。它和 Vue.js 的核心深度集成,让构建单页面应用变得易如反掌。

vue-router官方文档:https://router.vuejs.org/zh/

spa单页应用是由一个外壳页面和多个页面片段构成,页面片段之间的跳转是把一个页面片段删除或隐藏,加载另一个页面片段并显示出来。这只是片段之间的模拟跳转,实际上并没有离开壳页面,这种模式下路由显得尤为重要。它(路由对象或者说路由记录)相当于你页面片段的地址或者ID,在模拟页面导航或者说页面切换时只有与之匹配才能成功导航到相应的页面。

路由配置

将之前vue-cli3生成的初始项目进行改造,src文件夹下新建router目录。这样模块化管理路由,代码可读性更高,更易于维护。
在这里插入图片描述
router/index.js

import Vue from 'vue'//引入vue
import Router from 'vue-router'//引入vue-router
import myRouter from './my'//引入my模块的路由

import HomePage from 'views/HomePage.vue'//引入主页
Vue.use(Router)//全局使用router

const mainRouter = new Router({//创建路由对象
    routes: [{//路由配置,是一个对象数组。
            path: '/',
            name: 'homepage',
            component: HomePage
        },
        ...myRouter//解构my模块的路由
    ]
})

export default mainRouter

router/my/index.js

import MyPage from 'views/MyPage.vue'//引入MyPage
const myRouter = [{//my模块的路由配置
    path: '/mypage',
    name: 'mypage',
    component: MyPage
}]

export default myRouter

路由导航及路由传参

  • 路由导航
    路由导航分为声明式和编程式导航。具体如下。

  • 路由传参
    可以用query或者params传参,区别在于:
    1、强制刷新,query不会丢参,params会
    2、query会拼接到url上,params不会
    3、用query不需要name,用params需要name

如果提供了 path,params 会被忽略
同样的规则也适用于 router-link 组件的 to 属性。

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
在src/views新建两个页面
在这里插入图片描述

<template>
  <div class="g-main">
    <x-header title="主页" :left-options="{showBack:false}"></x-header>
    <div class="u-block">
      <h1>路由跳转</h1>
    </div>
    <router-link to="/mypage">
      <div class="u-routerlink">
        <p>声明式导航(router-link to="/mypage")</p>
      </div>
    </router-link>
    <x-button type="primary" text="编程式导航(path)" @click.native="jumpPageByPath"></x-button>
    //也可这样写 @click.native="()=>{$router.push({path:'mypage'})}"
    <x-button type="primary" text="编程式导航(name)" @click.native="jumpPageByName"></x-button>
  </div>
</template>

<script>
export default {
  methods: {
    jumpPageByPath() {
      this.$router.push({
        path: "/mypage",//也可用name,为了方便区分,这里使用path。
        query:{//若为params,会被忽略
          msg:"通过path跳转!"//传参
        }
      });
    },
    jumpPageByName() {
      this.$router.push({
        name: "mypage",
        params:{
          msg:"通过name跳转!"//传参
        }
      });
    }
  }
};
</script>
<template>
  <div class="g-main">
    <x-header title="我的"></x-header>
    <div class="u-block">
      <h1>{{msg}}</h1>
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {};
  },
  computed: {
    msg() {//计算属性
      if (this.$route.params.msg) {
        return this.$route.params.msg;
      }
      else if (this.$route.query.msg) {
        return this.$route.query.msg;
      }
      else{
          return '通过router-link跳转!'
      }
    }
  },
  watch: {//路由监听
    $route: {
      handler(route) {
        console.log(route.params);
        console.log(route.query);
      },
      immediate: true//为true路由发生变化立即执行
    }
  }
};
</script>

$router与 $route的区别

!!!注意!!! ?在HomePage 和MyPage访问的路由对象是不同的

  • $router 是全局路由对象

  • $route 是当前路由对象

控制台打印一下:

  mounted() {
    console.log('全局路由对象==========')
    console.log(this.$router)
    console.log('当前路由对象==========')
    console.log(this.$route)
  },

在这里插入图片描述

路由元信息

定义路由的时候可以配置 meta 字段:

import MyPage from 'views/MyPage'
const myRouter = [{
    path: '/mypage',
    name: 'mypage',
    component: MyPage,
    meta: {
        keepAlive: true,
        header: {
            title: "mypage"
        }
    }
}]

export default myRouter

在这里插入图片描述
如何用:
通过配置路由元信息来控制每个页面是否需要保持其状态,避免重新渲染。
src/App.vue

  <div id="app">
    <keep-alive>
      <router-view v-if="$route.meta.keepAlive" />
    </keep-alive>
    <router-view v-if="!$route.meta.keepAlive"/>
  </div>

在页面里可以(只是举例)

    <div class="g-main">
        <x-header :title="$route.meta.header.title"></x-header>
    </div>

在这里插入图片描述
当然还有很多用法,这里不做多探讨。

路由懒加载

异步加载组件(简称懒加载,又名异步组件)

当打包构建应用时,JavaScript 包会变得非常大,影响页面加载。如果我们能把不同路由对应的组件分割成不同的代码块,然后当路由被访问的时候才加载对应组件,这样就更加高效了。

常用方法:

component: resolve=>require(['@/views/HomePage.vue'],resolve)
//OR
component:  () => import( '@/views/HomePage.vue') 
//OR
component: r => require.ensure([], () => r(require('@/views/HomePage.vue')), 'HomePage')

总结

关于路由的知识总结远不止这一些,还有很多高级的运用需要结合实际项目来说比较容易理解,这里只是简单地记录了一些常用的,常见的,项目中会与遇到的实际问题。OK,这篇就到这里。

深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习的基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络类型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据中的时间依赖性。 5. **长短期记忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,非常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模型的工具和库。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络中用于添加非线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模型的预测与真实值之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于更新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模型过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值