(Vue-cli)三、路由传参(params参数&query参数&router和route&vue.config.js)

三、路由传参

1. params 参数

  • 如果我们想打开页面就显示首页,需要引入重定向,在routes中单独配置一个新的对象,path路径为redirect/home
    路由规则redirect属性重定向,redirect属性:进行重定向URL地址。
  • 如果输入的网页路径为未配置的路径,此时我们想要显示404页面,则在routes中配置一个新的对象,添加404路由Error404.vue,* 表示未配置的所有路由地址,并将其注册,引入。
  • 命名路由:在routes配置中给某个路由设置名称。在跳转路由时,可以根据路由的名称(name)去跳转。
  <div class="error404">
      <img src="../assets/img/404.jpg" @click="gotoHome">
  </div>
export default {
  name: "Error404",
  methods: {
      gotoHome(){
        // 回到首页
        // replace()方法跳转,不保留历史记录
        this.$router.replace('/home')
      }
  },
};

路由配置:

{
    path:'/index',
    redirect:'/home'         // 重定向到指定的路由
},
{
    path:'/city/:id',        // 注意:这里的路由需要传一个参数,路由可以传多个参数,如果传多个,后面继续接 /:xx
    name:'type',
    props:true,              // 设置该选项为true,组件可以通过props选项接收路由参数
    component:City
},
{
    path:'*',                // *号,表示匹配不上的所有路由
    name:'error404',
    component:Error404
}

页面:

  <div class="header">
      <router-link to="/home">首页</router-link> |
      <router-link :to="{name:'type',params:{id:1001}}">南京</router-link>
      <router-link to="/type/1002">镇江</router-link>
  </div>
 <div class="type">
    <h2>{{city.city}}</h2>
    <!-- <div ref="content"></div> -->
    <!-- 办法三 -->
    <!-- 通过v-html指令,可以渲染富文本内容(包含html信息的内容) -->
    <!-- v-text指令,渲染文本内容 -->
    <div v-html="city.content"></div>
 </div>
<script>
export default {
  name: "Type",
  props:['id'],
  data() {
    return {
      city:{
        id:0,
        city:'',
        content:''
      },
      lists:[
        {
          id:1001,
          city:'南京',
          content:`
              <ul>
                <li>南京的盐水鸭真好吃</li>
                <li>南京的夫子庙真好玩</li>
              </ul>
          `
        },
        {
          id:1002,
          city:'镇江',
          content:`
              <div>
                <button>镇江的锅盖面真好吃</button>
                <img src="https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fphoto.tuchong.com%2F4624999%2Ff%2F899031384.jpg&refer=http%3A%2F%2Fphoto.tuchong.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg?sec=1642159563&t=5e1a20043483c392006c12a8dba862b8">
              </div>
          `
        }
      ]
    }
  },
  methods: {
    getData(){
      this.city = this.lists.find(r=>r.id==this.id)
    }
  },
  created() {
    // console.log('111');
    // 因为点击的镇江,南京都在Type这个页面,路由没有跳转,这条created就不会执行。
    // 页面没有跳转,组件没有切换,那就要去watch监听,监听谁啊,监听id
    // $route返回的是当前路由信息,它里面的params保存的是路由参数
    // console.log(this.$route);
    // let {params:{id}} = this.$route
    // console.log(id);
    // this.city = this.lists.find(r=>r.id==id)
    this.getData()
  },
  // mounted() {
  //   // mounted挂载完成走一遍,watch监听一遍
  //   // 办法一,上边给个id="content",把页面的innerHTML,设为this.city.content(这个模板字符串)
  //   // document.querySelector('#content').innerHTML = this.city.content
  //   // 办法二,上边给ref="content",用$refs.content
  //   this.$refs.content.innerHTML = this.city.content
  // },
  watch:{
    id:{
      immediate:true,
      handler(){
        this.getData()
        // document.querySelector('#content').innerHTML = this.city.content
        // this.$refs.content.innerHTML = this.city.content
      }
    }
  }
};
</script>

效果:点击城市名切换对应信息

2. query参数

路由地址,采用query传参方式:?参数1=XXX&参数2=XXX

  <router-link :to="{name:'news',query:{id:1001}}">十九届六中全会精神</router-link> |
  <router-link to="/news?id=1002">LPL第006号选手Uzi复出加盟BLG</router-link> |
  <router-link to="/news?id=1003">新版《仙剑奇侠传》路透曝光</router-link> |
  <div class="news">
      <h2>{{news.name}}</h2>
      <div v-html="news.content"></div>
  </div>
<script>
export default {
  name: "News",
  data() {
      return {
          query:this.$route.query,
          news:{
              id:0,
              name:'',
              content:''
          },
          lists:[
            {
                id:1001,
                name:'十九届六中全会精神',
                content:`
                    <h3>2021年12月10日8时11分,我国在酒泉卫星发射中心用长征四号乙运载火箭,成功将实践六号 05 组卫星发射升空。这次任务是长征系列运载火箭的第 400 次飞行 汪江波摄 / 本刊<h3>
                `
            },
            {
                id:1002,
                name:'LPL第006号选手Uzi复出加盟BLG',
                content:`
                    <div>
                        Uzi在微博发文,宣布"我回来了!"
                    </div>
                `
            },
            {
                id:1003,
                name:'新版《仙剑奇侠传》路透曝光',
                content:`
                    <div>
                        95后新人对标胡歌刘亦菲,有胜算?作为仙侠剧的天花板,《仙剑奇侠传》曾陪伴无数人度过一段美好的时光,多年来热度不减,每每有相关消息总会引起网友的热议。此前,网上传出《仙剑奇侠传》翻拍的消息,将启用一批新人演员,如今几位主演的路透图终于释出了。
                        <br>
                        <img src="https://inews.gtimg.com/newsapp_bt/0/14307614873/1000">
                    </div>
                `
            }
          ]
      }
  },
  methods: {
    getData(){
      // 获取路由的query传参
      let { query: { id } } = this.$route;
      this.news = this.lists.find((r) => r.id == id);
    }
  },
  watch:{
      // 深度监视
      $route:{
          immediate:true,
          handler(){
            this.getData()
          }
      }
  }
};
</script>

效果:点击新闻标题切换对应信息

params参数

{
    name:'type',
    path:'/type/:id',
    props:true,
    component:Type
}

query参数

{
    name:'news',
    path:'/news',
    component:News
}

插播传送门=>>>Vue Router 的params和query传参的使用和区别(详尽)


3. $router和$route

$router返回的是当前项目中的路由器对象。
$route返回的是当前路由信息。

控制台打印this.$router和this.$route

4. vue.config.js

vue.config.js 是一个可选的配置文件,如果项目的 (和 package.json 同级的) 根目录中存在这个文件,那么它会被 @vue/cli-service 自动加载。
vue.config.js 是vue的配置文件,必须创建在demo根目录下,该配置文件中,只能使用commonjs模块化语法,使用module.export导出,格式如下。

// 引入nodejs内置模块path
let path = require('path')
// 注意:该配置文件中,只能使用commonjs模块化语法
module.exports = {
    // 关闭 eslint-loader 语法检查
    lintOnSave:false,
    // 配置devServer开发服务器
    devServer:{
        // 端口号
        port: 5566,
        // 自动打开
        open:true,
        // 静态资源路径
        // 注意:__dirname是nodejs的内置变量,返回的是的当前项目的绝对路径
        // contentBase: path.join(__dirname, "static")
    },
    // 用于配置原生的Webpack配置
    configureWebpack:{
        // 解析
        resolve:{
            // 定义路径别名
            alias:{
                "@c":path.resolve(__dirname,'src/components'),
                "@p":path.resolve(__dirname,'src/pages'),
                "@a":path.resolve(__dirname,'src/apis'),
                "@u":path.resolve(__dirname,'src/utils'),
            }
        }
    }
}
// 导入Home组件
// import Home from '../views/Home.vue'  // 这里可以给绝对路径靠谱,但是写错一个都不行熬
// import Home from '@/views/Home.vue'
import Home from '@v/Home.vue'

@符号代表src资源目录,在vue.config.js文件中将路径解析,path.resolve是拼接路径方法。将@c定义为当前绝对路径
@c代表src目录下的components文件,@v代表src目录下的views文件,其他同理,后续在其他文件中引入文件时,只需要使用以下方法即可导入,不会随着文件目录的改变而改变。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,837评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,551评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,417评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,448评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,524评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,554评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,569评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,316评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,766评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,077评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,240评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,912评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,560评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,176评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,425评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,114评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,114评论 2 352

推荐阅读更多精彩内容