首页 > vue.js的第二层菜单内容是一样的,怎么修改一下数据结构?

vue.js的第二层菜单内容是一样的,怎么修改一下数据结构?

下面的代码是一个选择年月的表单,因为月份都是1月-12月,是相同的,所以问题就是:下面代码中的vue.js代码怎么修改一下数据结构,让月份只用写一次就好。
html

<!DOCTYPE html>
<html lang="zh-cn">
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <meta http-equiv="x-ua-compatible" content="ie=edge">
    <link href="https://cdn.bootcss.com/bootstrap/4.0.0-alpha.2/css/bootstrap.min.css" rel="stylesheet">
    <style>
        #card1 {
            width: 40rem;
            position: absolute;
            display: none;
            right: 0;
            left: auto;
            top: 100%;
            z-index: 1000;
            float: left;
            min-width: 160px;
            padding: 5px 0;
            margin: 2px 0 0;
            font-size: 1rem;
            color: #373a3c;
            text-align: left;
            list-style: none;
            background-color: #fff;
            -webkit-background-clip: padding-box;
            background-clip: padding-box;
            border: 1px solid rgba(0, 0, 0, .15);
            border-radius: .25rem;
        }
    </style>
</head>
<body>
<div class="container spark-screen">
    <fieldset class="form-group">
        <label for="inputGroupText" class="col-xs-2 control-label">选择年月:</label>
        <div id="inputGroup1" class="input-group">
            <input id="inputGroupText" name="inputGroupText" v-model="choseninputGroup1" type="text"
                   class="form-control"
                   aria-label="Text input with dropdown button"
            <div class="input-group-btn">
                <button id="button1" type="button" class="btn btn-secondary dropdown-toggle"
                        aria-haspopup="true" aria-expanded="false">
                </button>
                <div class="card dropdown-menu-right" id="card1">
                    <div class="card-header">
                        选择
                        <button type="button" class="close" aria-label="Close">
                            <span aria-hidden="true">&times;</span>
                            <span class="sr-only">Close</span>
                        </button>
                    </div>
                    <div class="card-block">
                        <table id="table1" class="table table-sm table-bordered dropdown-menu-right">
                            <tr>
                                <td>90年代</td>
                                <td>
                                    <ul class="year-month">
                                        <li class="col-xs-3" v-for="first in group1">
                                            <a class="trigger right-caret">{{first.level01}}</a>
                                            <ul class="row dropdown-menu sub-menu">
                                                <li class="col-xs-4" v-for="second in first.level02"><a
                                                        data-table1="{{first.level01}}{{second}}">{{second}}</a>
                                                </li>
                                            </ul>
                                        </li>
                                    </ul>
                                </td>
                            </tr>
                            <tr>
                                <td>00年代</td>
                                <td>
                                    <ul class="year-month">
                                        <li class="col-xs-3" v-for="first in group2">
                                            <a class="trigger right-caret">{{first.level01}}</a>
                                            <ul class="row dropdown-menu sub-menu">

                                                <li class="col-xs-4" v-for="second in first.level02"><a
                                                        data-table1="{{first.level01}}{{second}}">{{second}}</a>
                                                </li>
                                            </ul>
                                        </li>
                                    </ul>
                                </td>
                            </tr>
                        </table>
                    </div>
                </div>
            </div>
        </div>
</div>
</fieldset>
<script src="https://cdn.bootcss.com/jquery/2.2.1/jquery.min.js"></script>
<script src="https://cdn.bootcss.com/tether/1.1.1/js/tether.min.js"></script>
<script src="https://cdn.bootcss.com/bootstrap/4.0.0-alpha.2/js/bootstrap.min.js"></script>
<script src="https://cdn.bootcss.com/vue/1.0.17/vue.min.js"></script>
</body>
</html>

jquery代码

<script>
    $(function () {
        $('#button1').click(function (e) {
            var menu = $('#card1');
            e.stopPropagation();
            if (menu.is(":hidden")) {
                menu.show();
            } else {
                menu.hide();
            }
            $('.sub-menu').hide();
        });

        $(".year-month>li > a.trigger").on("click", function (e) {
            var current = $(this).next();
            var grandparent = $(this).parents();
            grandparent.find(".sub-menu:visible").not(current).hide();
            current.toggle();
            e.stopPropagation();
        });

        $(".sub-menu >li >a").on("click", function () {
            var root = $(this).closest('.dropdown');
            root.find('.sub-menu:visible').hide();
            $('input[id=inputGroupText]').val($(this).attr("data-table1"));
            $('#card1').hide();
        });

        $('.sub-menu').mouseleave(function () {
            $(this).hide();
        });


        $(window).click(function () {
            $("#card1").hide();
        });


        $("button.close").click(function () {
            $(this).parents("#card1").hide();
        });

        $("#card1,.form-control").click(function (e) {
            e.stopPropagation();
        });
    });
</script>

vue代码

<script>
    var table1 = new Vue({
        el: '#table1',
        data: {
            menu: [{
                'group': '1',
                'level01': '1990年',
                'level02': ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月']
            }, {
                'group': '1',
                'level01': '1991年',
                'level02': ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月']
            }, {
                'group': '1',
                'level01': '1992年',
                'level02': ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月']
            }, {
                'group': '2',
                'level01': '2000年',
                'level02': ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月']
            }, {
                'group': '2',
                'level01': '2001年',
                'level02': ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月']
            }, {
                'group': '2',
                'level01': '2002年',
                'level02': ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月']
            }]
        },
        computed: {
            group1: function () {
                return this.menu.filter(function (m) {
                    return m.group === '1'
                })
            },
            group2: function () {
                return this.menu.filter(function (m) {
                    return m.group === '2'
                })
            }
        }
    });
</script>

是不是出了点问题,问的问题都不能显示到队列中


定义两个数组循环赋值不就好了嘛


HTML

<table id="table1" class="table table-sm table-bordered dropdown-menu-right">
    <tr v-for="gene in menu">
        <td>{{$key}}</td>
        <td>
            <ul class="year-month">
                <li class="col-xs-3" v-for="year in gene">
                    <a class="trigger right-caret">{{year}}</a>
                    <ul class="row dropdown-menu sub-menu">
                        <li class="col-xs-4" v-for="month in months">
                            <a>{{month}}</a>
                        </li>
                    </ul>
                </li>
            </ul>
        </td>
    </tr>
</table>

SCRIPT

var table1 = new Vue({
    el: '#table1',
    data: {
        menu: {
            '90年代': ['1990年', '1991年', '1992年'],
            '00年代': ['2000年', '2001年', '2002年']
        }
    },
    computed: {
        months: function () {
            var arr = [];
            for (var i = 1; i <= 12; i++) {
                arr.push(i + '月');
            }
            return arr;
        }
    }
});
【热门文章】
【热门文章】