vue通过router.push跳转 怎么添加Class来改变点击选中的效果

vue通过router.push跳转 怎么添加Class来改变点击选中的效果

顶部一个nav导航组件,点击一次跳转页面,然后nav上的被点击项添加类名。例如从某一页面点击E,跳转到E页面同时添加类名。nav中的每个item是v-for出来的http://img1.sycdn.imooc.com//climg/5d0208d50001a43c07140265.jpg

正在回答

登陆购买课程后可参与讨论,去登陆

4回答

同学你好, 根据你的代码, 可以结合老师前两次给你的思路修改

1、在navbar组件中, 通过在点击事件传入对应的index值

http://img1.sycdn.imooc.com//climg/5d031044000150a014570269.jpg

2、在changePage_Color中, 通过传入的index值, 判断需要跳转到那个页面, 通过query属性传递参数给父组件

http://img1.sycdn.imooc.com//climg/5d0310b0000158a510680399.jpg

3、在父组件中通过this.$route.query获取传递的参数, 然后在通知子组件当前显示的哪一个页面

http://img1.sycdn.imooc.com//climg/5d0310f10001673e08680750.jpg

4、 子组件中通过props接收父组件传递的消息,修改current值, 让当前选项卡添加类名focus,字体变红色

http://img1.sycdn.imooc.com//climg/5d0311980001950214800687.jpg

最后实现如下所示

http://img1.sycdn.imooc.com//climg/5d03120b00019ab811750347.jpg

http://img1.sycdn.imooc.com//climg/5d03121a0001f63e11130382.jpg

同学可以结合示例代码修改一下自己代码,要灵活运用所学知识, 在编写代码的过程中需要仔细一点哦

如果帮助到了你, 欢迎采纳~~~

祝学习愉快~~~


  • 菜鸟x 提问者 #1
    懂了。非常非常感谢老师的解答!
    2019-06-14 11:49:02
提问者 菜鸟x 2019-06-13 23:53:30
<template>
  <div>
    <ul>
      <li
        v-for="(item, index) in list"
        :key="index"
        :value="index"
        :class="{focus: index === current}"
        @click="changePage_Color"
        >{{item}}</li>
    </ul>
  </div>
</template>

<script>
export default {
  name: 'NavBar',
  data () {
    return {
      list: ['A', 'B', 'C', 'D', 'E', 'F'],
      current: ''
    }
  },
  mothods: {
    changePage (e) {
      this.color(e)
      this.page(e)
    },
    color (e) {
      this.current = e.target.value
    },
    page (e) {
      if (e.target.innerText === 'A') {
        this.$router.push('/a')
      }
      if (e.target.innerText === 'B') {
        this.$router.push('/b')
      }
    }
  }
}
</script>

<style scoped>
  ul {
    width: 500px;
    border: 1px solid red;
    padding: 5px;
    display: flex;
    justify-content: space-between;
  }
  li {
    margin: 5px;
    border: 1px solid #000;
    font-size: 30px;
    cursor: pointer;
  }
  .focus {
    color: red;
  }
</style>
<template>
  <div>
    <nav-bar/>
    <div class="content">A页面</div>
  </div>
</template>

<script>
import NavBar from './navbar'
export default {
  name: 'APage',
  components: {
    NavBar
  }
}
</script>
<template>
  <div>
    <nav-bar/>
    <div class="content">B页面</div>
  </div>
</template>

<script>
import NavBar from './navbar'
export default {
  name: 'BPage',
  components: {
    NavBar
  }
}
</script>


好帮手慕慕子 2019-06-13 19:17:36

同学你好, 使用this.$router.push()跳转页面是可以传递参数的, 可以将当前点击选项卡的索引值传递给跳转的页面。可以参考如下示例:

1、点击的时候, 通过query这个属性,传递参数

http://img1.sycdn.imooc.com//climg/5d02305d0001564914020682.jpg

2、跳转的页面通过this.$route.query.index接收传递过来的索引值,之后给选项卡添加特定类名的方式, 可以参考老师的上一个实现思路

http://img1.sycdn.imooc.com//climg/5d0230b20001280706270109.jpg

由于不知道你的代码具体是怎么写的,可能无法准确的为你解决问题

如果还有问题, 建议: 可以将你的相关代码直接粘贴过来,便于准确的定位和解决问题

如果帮助到了你, 欢迎采纳!

祝学习愉快~~~

  • 提问者 菜鸟x #1
    嗯。代码已经发上来了。从A页面点击B,然后B页面的navbar上的B选项添加上class(其他页面一样)
    2019-06-13 23:56:05
好帮手慕慕子 2019-06-13 17:46:15

同学你好, 请问你这里是想实现类似tab切换的效果吗? 如果是这样的话, 老师这里给你提供一个简单的思路

1、 通过动态的设置class值,判断index与isActive值是否相等,为选项卡添加active类名。

2、定义一个变量isActive,默认是0,第一个选项卡添加类名active 

3、 在nav上绑定点击事件,将index值传入,在点击的时候修改isActive的值,让被点击的选项卡拥有active这个类名, 示例:

http://img1.sycdn.imooc.com//climg/5d021a4a0001eba416330939.jpg

同学可以自己下去测试一下哦

如果同学不是指这里, 建议: 可以详细的描述一下指的是哪里, 再次提问, 我们会继续为你解答的

如果帮助到了你, 欢迎采纳!

祝学习愉快~~~

  • 提问者 菜鸟x #1
    我说有是有切换页面的(通过this.$router.push()去跳转页面,不跳转的时候能添加上)。但我试过切换页面。上一个页面的tab的是添加了class了。但下一个页面的tab没加上(上一个页面好像是添加上了)。能否利用了父子组件值的办法去告诉下一个页面的tab去添加class样式
    2019-06-13 18:04:30
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
热门框架Vue开发WebApp 18版
  • 参与学习           人
  • 提交作业       209    份
  • 解答问题       3299    个

本路径是通过ES6基础知识、运用Zepto、Swiper、fullPag等移动端常用工具包、以及当下流行框架Vue,结合多个实战案例,还原真实开发场景,最终实现手机端购物商城网页开发。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师