vue router 动态路由

vue router的动态路由

导航数据是后台读取的,用的前端工具是VSCode

App.vue里面加载数据

  // 引入组件
  import detail from '@/components/Detail.vue'

export default {
  name: 'App',
  data () {
      return {
        navList : null
        activeClass:-1
      }
  },
  components : {
    detail
  },
  mounted() {
    this.nav();
  },
  methods : {
    nav : function() {
      let self = this;
      self.myAjax.post( '/api/page/nav', param).then(function(resp) { //请求成功
        const resData = resp.data;
        self.navList = resData.systemInfoList;
      }).catch(function(err) { //请求失败
        console.log(err);
      })
    },
    loadListByNav ( event,systemId,index ) {
        let self = this;
        self.activeClass = index;  // 把当前点击元素的index,赋值给activeClass
        this.param.systemId = systemId;
        //this.list();//根据导航传入的参数,重新更新列表数据
        if ( systemId == null ) {
          this.activeClass = -1; 
        }
        self.$router.push({
          path:'/nav/'+systemId,
          params: {
            systemId: systemId
          }
        })
      }
  }
}

注:查询出来的列表数据可以通过定义全局,store有空研究

APP里面引用了详情的组件,显示用:

<template>
  <div id="app">
    <div class="left-nav writ-back">
      <div class="side-nav-cont clearfix">
        <ul>
          <li @click="loadListByNav($event,null)">
            <i class="iconfont icon-fenlei"></i>All Classifiy
            <span>{{listCount}}</span>
          </li>
          <li  v-for="(na,index ) in navList"  @click="loadListByNav($event,na.systemId,index)" :key="index"  :class="activeClass  == index ? 'active':''" >{{na.systemName}} <span>{{na.count}}</span>
          </li>
        </ul>
    </div>
    </div>
    <div class="page-content">
      <form class="layui-form mt10 writ-back" action="" lay-filter="component-form-element">
        <div class="row main-panel-box">
          <!-- Travel management --> 
            <div class="col-xs-8 col-sm-8">
              <label class="layui-form-label">Title:</label>
              <div class="layui-input-block">
                <input type="text" name="fullname" lay-verify="required" placeholder="" autocomplete="off" class="layui-input">
              </div>
            </div>

            <div class="col-xs-4 col-sm-4 text-left">
                <button type="submit" class="btn btn-primary">Search</button>
                <a href="##" class="iconfont icon-shezhi fr pt10"></a>
            </div>
          </div>
        </form>

        <div class="container-fluid writ-back mt10 pl10">
           <!-- 导航 -->
          <ul class="nav nav-tabs" role="tablist">
            <li role="presentation" class="active"><a href="#toDo" aria-controls="toDo" role="tab" data-toggle="tab">To do<span>{{todolistCount}}</span></a></li>
            <li role="presentation"><a href="#read" aria-controls="read" role="tab" data-toggle="tab">To read<span>{{readlistCount}}</span></a></li>
            <li role="presentation"><a href="#viewed" aria-controls="viewed" role="tab" data-toggle="tab">Viewed<span>30</span></a></li>
          </ul>
          <div class="tab-content">
            <!-- <router-view></router-view> -->
            <detail></detail>
          </div>        
          <div id="pageToolbar" class="text-center"></div>
          
        </div>
    </div>
  </div>
</template>

main.js里引用router,目录结构是src/router/index.js

// 引入路由
import router from './router' 

其中index.js的定义

const routes = [
    {
      path : '/',
      component : Detail,
      props : true
    },
    {
      name : 'all',
      path : '/',
      component : Detail,
      props : true
    },
    {
      path : '/nav/:systemId',
      component : Detail,
      props : true
    }
  ]

我用的是编程式的,是push,App.vue里面

<li @click="loadListByNav($event,'all')">
            <i class="iconfont icon-fenlei"></i>All Classifiy
            <span>30</span>
          </li>
          <li  v-for="(na,index ) in navList"  @click="loadListByNav($event,na.systemId)" :key="index">{{na.systemName}} 
            <span>{{na.count}}</span>
          </li>

另外一种方式是

</li><li  v-for="(na,index ) in navList"  :key="index">
            <router-link :to="{ path: '/nav/' + na.systemId }">{{na.systemName}} </router-link>
            <span>{{na.count}}</span>
          </li>

path拼接要传入的参数

loadListByNav方法里面的push就可以去掉了。

Detail.vue里面的取参:

<tbody>
                  <tr>
                    <td>{{this.$route.params.systemId}}</td>
                  </tr>
                </tbody>

父组件对子组件的传参,还有另一种方式

data () {
        return {
          toDetail:{
            userId : 'aa',
            type : 1,
            currentPage : 1,
            systemId : null,
            title : null,
            pageSize : 10,
            todoList:null
          }       
        }
    }

其中组件

<detail v-if="toDetail" :toDetail="toDetail"></detail>

子组件:

props:{
        // activeClass:Number
        toDetail:Object,
          default () {
              return {
                currentPage:1
              }
          }
      }

对象的取值:

{{this.toDetail.pageSize}}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值