Vue-cli——路由重定向&传参

一、书写习惯

(1)在components下新建组件header ,跳转的router都放在这里

因为要保持App.vue不臃肿
 
首页 分类
(2)并在app全局组件中引入这个组件,注册,使用


二、路由中的重定向

(1)路由重定向redirect

  routes:[
        {
            path:'',
重定向,如果path地址为空,会默认跳转到home页面
            redirect:'/home' 
        },
       {
            path:'/index',
重定向,如果path地址为/index,为默认跳转到home页面
            redirect:'/home' 
        },]

(2)/表示是根路径,router-view在哪根路径就是哪,这里把根路径放在在app.vue中

export default new VueRouter({
      routes:[
        {
          path:'/',
          name:'home',
          component:Home
        }
      ]
      })

(3)路径设置为*,表示跳转未配置的路由地址,都会默认跳转404页面

       {
              path:'*',
              name:'error404',
              component:Error404
          }

(4)点击图片返回首页

实现过程,给img绑定点击事件,通过替换当前路由对象地址完成跳转操作





http://localhost:8080/#/type/1001
去除提示
"eslintConfig"
  "rules": {
      "no-unused-vars":"off"
    }

三、路由传参的方式

路由传参的方式有两种:
1.通过开启props参数,并在组件内部接收props:[],并监听接收到的参数进行赋值调用实现页面数据切换
2.通过?id='1001'传参,this.$route的query接收参数

(1)/:id传参,$route的params接收

①配置路由页面配置路径/:id传递参数
②$route返回当前路由信息,它里面的params保存的是路由参数
③查找当前lists列表ID等于传递过来路径的参数的那一项,并赋给定义的空对象
④这个方法不能连续点击跳转页面,如果需要连续跳转要结合开启props
//Header.vue
    南京
    镇江
    无锡
    苏州
//Type.vue
           

{{city.city}}

{{city.content}}

//router的index.js { //只有输入type/x,才正常出现,只输入type会报错 path:'/type/:id', name:'type', component:Type }, //Type.vue created(){ console.log(this.$route); let {params:{id}}=this.$route this.city= this.lists.find(r=>r.id==id) }, //这个id是通过点击后params里传过来的,不能连续跳转

通过props组件的属性

①开启组件属性接收参数(路由参数通过组件的props属性来接收)
②设置组件props接收传递的参数/:id,所有是props接收id参数
③开启监听器以对象形式,一开始执行一遍(对象的话可以可通过开启deep:true,来开启深度监听)。通过监听id获取到的数据,再写方法遍历数组中id相等的那一项赋值给创建的空对象city,最后在监听器中调用方法,只要数据发生变化就会调用一次方法
//Header.vue
    南京
    镇江
    无锡
    苏州
//Type.vue
           

{{city.city}}

{{city.content}}

//router的index.js { path:'/type/:id', props:true, name:'type', component:Type, }, //Type.vue props:['id'], methods: { getData(){ this.city=this.lists.find(r=>r.id==this.id) } 这个this.id是通过监听属性得来的数据,好处每次变动可以连续跳转 }, watch:{ //开启监听 id:{ //监听对象的形式,开启深度监听 //一开始执行一次 immediate:true, //房产返回两个值,现在的和过去的,由于对象赋值是改变地址,所有过去的值为 undefined handler(){ this.getData() } } }

(2)通过?id=xx传参,获取是在this.$route里的query。

深度侦听当前路由信息
①不需要修改路由,侦听当前路由变化,结构出当前路由query传递参数,遍历出与当前id相等的一项赋值给空对象
 广州市大规模迁移砍伐城市树木,市委副书记等10人被问责
 提前结课离校!北大等部分在京高校调整期末考试及寒假安排
     watch: {
         $route: {
         immediate: true,
         handler() {
        let { query: { id }} = this.$route;
        this.news = this.lists.find((r) => r.id == id);
      },
    },
  },
②多个参数
        提前结课离校!

模板字符串多内容的显示

(1)通过获取标签,设置标签的html内容,此方法必须是在监听id,并执行id同时使用。

此方法虽可跳转但控制台会报错

  

lists:[ { id:1001, city:'南京', content:`
  • 南京的盐水鸭真好吃
  • 南京的夫子庙真好玩
` }] mounted() { // 通过获取标签修改hrml的值为当前城市的内容 document.querySelector('#content').innerHTML=this.city.content }, //开启监听 watch:{ //监听对象的形式,开启深度监听 id:{ //一开始执行一次 immediate:true, //返回两个值,现在的和过去的,由于对象赋值是改变地址,所有过去的值为undefined handler(){ this.getData() document.querySelector('#content').innerHTML=this.city.content } } }

(2)使用ref

页面正常跳转,但此方法控制台同会报错

    

lists:[ { id:1001, city:'南京', content:`
  • 南京的盐水鸭真好吃
  • 南京的夫子庙真好玩
` }] mounted() { // 通过获取标签修改hrml的值为当前城市的内容 this.$refs.content.innerHTML=this.city.content }, //开启监听 watch:{ //监听对象的形式,开启深度监听 id:{ //一开始执行一次 immediate:true, //返回两个值,现在的和过去的,由于对象赋值是改变地址,所有过去的值为undefined handler(){ this.getData() this.$refs.content.innerHTML=this.city.content } } }

(3)推荐方法v-html

①通过v-html指令,可以渲染富文本内容(包含html信息的内容)
② v-text指令,渲染文本内容
    

lists:[ { id:1001, city:'南京', content:`
  • 南京的盐水鸭真好吃
  • 南京的夫子庙真好玩
` }] //开启监听 watch:{ //监听对象的形式,开启深度监听 id:{ //一开始执行一次 immediate:true, //返回两个值,现在的和过去的,由于对象赋值是改变地址,所有过去的值为undefined handler(){ this.getData() } } }

总结今天的知识点,路由传参的三种方式、路径的配置和v-html渲染副文本内容

你可能感兴趣的:(Vue-cli——路由重定向&传参)