vue——二级菜单demo

vue——二级菜单demo学习了vue,最近想着写一写demo练一练,今天写的二级菜单,中间踩过很多坑1、存数据:最开始想着一级菜单存一个数组,二级菜单存不同的数组。那么问题来了,一级菜单和二级菜单应该是超级相关联的,如果分开存储再去建立关系很麻烦,所以存在一个数组对象中,那么也就是说,不管多少级菜单都可以这样,又方便还不需要我们自己去建立相关关系。2、‘^’的变化,最开始想着不同状态用v-show去操作dom…

大家好,又见面了,我是你们的朋友全栈君。

学习了vue,最近想着写一写demo练一练,今天写的二级菜单,中间踩过很多坑

1、存数据:最开始想着一级菜单存一个数组,二级菜单存不同的数组。那么问题来了,一级菜单和二级菜单应该是超级相关联的,如果分开存储再去建立关系很麻烦,所以存在一个数组对象中,那么也就是说,不管多少级菜单都可以这样,又方便还不需要我们自己去建立相关关系。

2、‘^’  的变化,最开始想着不同状态用v-show去操作dom,这样的话就是让我们多写一个b标签,也不是不可行。不过我又想了一下,用动态改变class也是很方便,也就是用v-bind:class=“”,这样我们的样式不管怎么不同,改起来也很方便。

3、绑定点击事件的a标签,我最开始不小心写了href属性,导致一个啥问题呢,就是我们点击后,页面就会刷新,数据又变成了我们之前的数据,就感觉只是闪一下的出现我们要的东西。所以要把href去除,防止它刷新。不过有其他链接应该不一样。

index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>二级导航目录</title>
    <script src="vue.js"></script>
    <script src="index.js"></script>
    <link rel="stylesheet" href="index.css">
</head>
<body>
    <div class="tree" id="my">
        <ul>
            <li class="p_item" v-for="list in lists">
                <!-- a标签不能带href,不然会刷新,刷新数据和没调用点击函数一样,此处踩坑了 -->
                <a class="p_title" v-on:click="curshow(list)">{
  
  {list.name}}
                    <b :class="list.flag ? 'down': 'up'">^</b>
                </a>
                <ul class="c_item" v-if="list.flag">
                    <li v-for="sub in list.sublist">
                        <a>{
  
  {sub.name}}</a>
                    </li> 
                </ul>
            </li>
        </ul>
    </div>
</body>
</html>

index.css

* {
    margin: 0px;
    padding: 0px;
}
ul,li {
    list-style-type: none;
}
body,html {
    width: 100%;
    height: 100%;
}
a {
    color: #fff;
    text-decoration: none;
}
.tree {
    width: 200px;
    height: 100%;
    background: #316BAA;
}
.p_title {
    color: #fff;
    display: block;
    padding: 15px;
    cursor: pointer;
}
.p_title b{
    float: right;
    transition: all ease 1s;
    -webkit-transition: all ease 1s;
    -o-transition: all ease 1s;
    -moz-transition: all ease 1s;
    -ms-transition: all ease 1s;
}
.up {
    transform: rotate(0deg);
    -webkit-transform: rotate(0deg);
    -o-transform: rotate(0deg);
    -moz-transform: rotate(0deg);
    -ms-transform: rotate(0deg);
}
.down {
    transform: rotate(180deg);
    -webkit-transform: rotate(180deg);
    -o-transform: rotate(180deg);
    -moz-transform: rotate(180deg);
    -ms-transform: rotate(180deg);
}
.p_title:hover {
    color: #999;
}
.c_item  a{
    display: block;
    padding: 10px 20px;
    background: #275586;
    color: #fff;
}
.c_item li{
    cursor: pointer;
}
.c_item li a:hover {
    color: #999;
}

index.js

window.onload = function () {
    var vm = new Vue({
        el: '#my',
        data: {
            lists: [{
                    name: '运动服务',
                    //用于状态判定
                    flag: false,
                    //二级菜单
                    sublist: [
                        { name: '运动服务1'}, 
                        { name: '运动服务2'}, 
                        { name: '运动服务3'}, 
                    ]
                },
                {
                    name: '衣服包包',
                    flag: false,
                    sublist: [
                        { name: '裙子'}, 
                        { name: '套装'}, 
                        { name: '娃娃鞋'}, 
                        { name: '靴子'}
                    ],
                },
                {
                    name: '母婴用品',
                    flag: false,
                    sublist: [
                        { name: '奶粉'}, 
                        { name: '尿不湿'}, 
                        { name: '婴儿床'}
                    ]
                }
            ]
        },
        methods: {
            curshow: function(list){
                //如果状态是点开的,那么再次点击就隐藏
                if(list.flag){
                    list.flag=false;
                }
                //若当前的是隐藏,则点击当前的显示,其余的隐藏
                else{
                    for(let i=0;i<this.lists.length;i++){
                        this.lists[i].flag=false;
                    }
                    list.flag = true;
                }
                
            }
        }
    })
}

 

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

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/137591.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • TDD、FDD是什么意思?

    TDD、FDD是什么意思?TDD、FDD指第三代移动通信技术(3G)中的两种双工通信模式。TDD(Time-divisionDuplex)模式指时分双工模式,3G标准中的TD-SCDMA采用此双工模式;FDD(Frequency-divisionDuplex)模式指频分双工模式,3G标准中的WCDMA和CDMA2000采用此模式。一、工作原理TDD是一种通信系统的双工方式,在移动通信系统中用于分离接收…

    2022年4月27日
    44
  • 小米手机1亿像素跟相机(2020相机新品)

    小米集团旗下品牌Redmi再度发布多款“性价比之王”手机新品。11月26日,小米发布RedmiNote9系列的Note9Pro、Note95G和Note94G三款手机新品,三款手机价格均位于“千元档”甚至低于千元,再度成为市场上同价位机型中的“性价比之王”。对此,小米集团副总裁、中国区总裁、Redmi品牌总经理卢伟冰重申,“Redmi的想法很简单,就是为用户做好产品,然后价格卖的尽量厚道,坚持高端产品大众化,大众产品品质化。”此次小米推出的Note9Pro沿袭了之前的Note8Pro在超清

    2022年4月10日
    42
  • opencv widthstep 理解

    opencv widthstep 理解widthstep是指图像每行所占的字节数,主要要和width区别,width是指每行所含的像素个数,但是一个像素也可能占一个字节,也可能占三个字节或者四个,多个等.imagedata是指向存储图像像素值数组的指针,内容是这个数组的首地址,pt.y指的是像素点的行坐标,所以Img->imageData+Img->widthStep*pt.y便是该像素点所在行的首地址,然后再加上该像

    2022年6月11日
    28
  • Git使用详细教程

    Git使用详细教程

    2021年10月10日
    36
  • 在微观经济学中,对某一商品的需求是指_苹果公司因违反俄反垄断法被罚

    在微观经济学中,对某一商品的需求是指_苹果公司因违反俄反垄断法被罚供给与需求理论—–说明市场经济中供给与需求如何决定价格,以及价格又如何配置经济中的稀缺资源。4.1市场与竞争4.1.1什么是市场1、市场:由某种物品或劳务的买者与卖者组成的一个群体;4.1.2什么是竞争市场1、竞争市场:有许多买者与卖者,以至于每个人对市场价格的影响都微乎其微的市场。2、完全竞争市场—-两个特征:1)可供销售的物品是完全相同的;2)买者和卖者人数众

    2025年6月12日
    0
  • OpenNebula 4.0 Beta 新特性介绍

    OpenNebula 4.0 Beta 新特性介绍

    2021年8月31日
    55

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号