Uniapp自定义vue导航菜单组件完成菜单动态高亮

        前几日使用uniapp框架写项目, 需要自定义vue导航菜单组件,并且完成菜单动态高亮,简而言之,tab组件内完成点哪哪个发生高亮。【相关推荐:《vue.js教程》】

        这里需要使用uniapp scroll-view组件,实现导航菜单的横向滑动,这里全部使用的是flex布局。

        子组件 tab.vue(自定义导航菜单组件)如下

        

11.png

立即学习“前端免费学习笔记(深入)”;

         默认activeIndex的值为0,也就是默认是导航菜单第一项高亮,循环的list数组是从主组件接收的,在子组件中可以使用props接收主组件的值:

    export default {name: "tab",data() {return { activeIndex:0};},// 组件实例的作用域是孤立的。这意味着不能(也不应该)在子组件的模板中直接饮用父组件的数据。要让子组件使用父组件的数据,需要通过子组件的 props 选项。子组件要显示的用 props 声明它期望获得的数据// 借助watch可以监听data或者 props 值的变化watch:{tabIndex(newVal,oldVal){// console.log(newVal,oldVal);this.activeIndex = newVal}},//接收来自主组件的值 list  props: {list: {type: Array,default () {return []}} },methods:{clickTab(item,index){// console.log(item,index);this.activeIndex = index// tab是自定义事件名 派发给组件的调用者 index.vuethis.$emit("tab",{data:item,index:index})}}}

登录后复制

    tab.vue样式如下:

        .tab{        display: flex;        width: 100%;        border-bottom: 1px solid #f5f5f5;        .tab-srcoll{        display: flex;        overflow: hidden;        box-sizing: border-box;            .tab-srcoll-box{                display: flex;                height: 45px;                align-items: center;                flex-wrap: nowrap;                box-sizing: border-box;                .tab-srcoll-item{                    color: #333;                    flex-shrink: 0;                    font-size: 14px;                    padding: 0 10px;                    &.active{                        color: $chloe-base-color;                    }                }                        }        }    }

登录后复制

        

在主组件index.vue页面中调用tab.vue组件,并接收子组件派发的tab事件

        

登录后复制

    export default {data() {return {list: [],activeIndex:0};},onLoad() {this.getTabList() },onShow(){},methods: {tab({data,index}) {// console.log(data.catname,index);this.activeIndex = index},async getTabList() {const res = await this.$myRequest({url: 'tab'})const {data} = resthis.list = data} }}

登录后复制

        在getTabList方法中使用的$myRequest是封装的promise网络请求,内容如下:

    const BASE_URL = 'http://inews.io/'这里可以换成你后端接口的域名export const myRequest = (options) => {const {url,method,data,timeout} = optionsreturn new Promise((resolve, reject) => {uni.request({url: BASE_URL + url,method: method || 'GET',data: data || {},timeout:timeout || 3000,success: (res) => {if (res.statusCode !== 200) {uni.showToast({title: '请求数据失败',duration: 1000,icon: 'none'});}resolve(res)},fail: (err) => {uni.showToast({title: '请求接口失败',duration: 1000,icon: 'none'});reject(err)}})})}

登录后复制

    接着在main.js中引入注册全局变量

22.png

这样就可以全局使用$myRequest发起网络请求了。

最终实现的效果如图:

11.png

相关推荐:最新的5个vue.js视频教程精选2021年最新uni-app视频教程推荐(从入门到精通)

以上就是Uniapp自定义vue导航菜单组件完成菜单动态高亮的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/3020012.html

(0)
上一篇 2025年3月13日 05:33:10
下一篇 2025年3月1日 17:44:41

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • 深入了解vue中mixins的用法和注意事项

    本篇文章带大家了解一下vue中mixins(混入)特性,介绍一下mixins的使用方法和注意点,希望对大家有所帮助! mixins基础概况 vue中的解释是这样的,如果觉得语言枯燥的可以自行跳过嘿~ 混入 (mixins): 是一种分发 V…

    2025年3月13日 编程技术
    200
  • vue的八大生命周期状态分别是什么

    vue的八大生命周期状态:1、beforeCreate;2、created;3、beforeMount;4、mounted;5、beforeUpdate;6、updated;7、beforeDestroy;8、destroyed。 本教程操…

    2025年3月13日
    200
  • vuejs是什么时候出来的

    vuejs是2013年受到Angular的启发,开发出来的一款轻量框架,最初命名为Seed;2013年12月更名为vue,图标颜色是代表勃勃生机的绿色,版本号是“0.6.0”。2014年1月24日,vue正式对外发布,版本号是“0.8.0”…

    2025年3月13日
    200
  • vue怎么读取文件内容

    vue读取文件内容的方法:1、创建一个test.properties测试内容;2、通过“readTestFile(){const file = this.loadFile(‘test.properties’)&#82…

    2025年3月13日
    200
  • 怎么离线安装vue环境

    离线安装vue环境的方法:1、cmd运行命令“npm config get cache”;2、内网电脑安装nodejs;3、内网全局安装目录;4、内网命令安装离线依赖包;5、把vue项目复制到内网;6、查看全局命令是否正常即可。 本文操作环…

    2025年3月13日 编程技术
    200
  • vue脚手架安装步骤

    vue脚手架安装步骤:1、安装node环境;2、通过“npm install -g vue-cli”安装vue-cli脚手架;3、根据提示选择安装插件;4、安装项目依赖;5、运行“npm run dev”即可。 本文操作环境:windows…

    2025年3月13日 编程技术
    200
  • vue传值方式有哪些

    vue传值方式有:1、prop向下传递,事件向上传递;2、子组件通过$emit触发父组件的自定义事件;3、通过定义公共实例文件来进行非父子组件之间的传值。 本文操作环境:windows7系统、vue2.5.17版,DELL G3电脑。 vu…

    2025年3月13日
    200
  • vue有哪三种传值方式

    vue三种传值方式:1、“父传子”;父组件通过prop给子组件下发数据(传值)。2、“子传父”;子组件通过“事件”给父组件发送消息。3、“非父子传值”;非父子组件之间需要定义个公共的公共实例文件“bus.js”,作为中间仓库来传值。 本教程…

    2025年3月13日
    200
  • vue的router和route区别是什么

    区别:router是通过“Vue.use(VueRouter)”和VueRouter构造函数得到一个实例对象,它是一个全局的对象。而route是一个跳转的路由对象,每一个路由都会有一个route对象,是一个局部的对象。 本教程操作环境:wi…

    2025年3月13日
    200
  • vue中如何监听vuex中的数据变化

    vue监听vuex中数据变化的方法:可以先通过计算属性computed来获取vuex中的数据;然后通过watch来监听计算属性中值的变化,获取数据变更前后的值,并作出相应的处理。 本教程操作环境:windows7系统、vue2.9.6版,D…

    2025年3月13日
    200

发表回复

登录后才能评论