请问老师二级菜单怎么循环5次

请问老师二级菜单怎么循环5次

{{each}}
    <div class="banner-rightlis-hidden" data-n="hot">
        <%include('../../../../components/loading/loading.art',{inline:true,text:'数据获取中'})%>
        <!-- <dl>
            <dt>港澳台</dt>
            <dd>
                <a href="#">香港</a>
                <a href="#">澳门</a>
                <a href="#">台北</a>
                <a href="#">高雄</a>
                <a href="#">香港迪士尼</a>
                <a href="#">香港海洋公园</a>
                <a href="#">交通接驳</a>
                <a href="#">澳门塔</a>
                <a href="#">新濠天地水舞间</a>
                <a href="#">澳门豪华自助</a>
                <a href="#">台北101</a>
                <a href="#">台湾美食</a>
            </dd>
        </dl>
        <dl>
            <dt>国内热门城市</dt>
            <dd>
                <a href="#">三亚</a>
                <a href="#">东北雪乡</a>
                <a href="#">大理</a>
                <a href="#">丽江</a>
                <a href="#">昆明</a>
                <a href="#">西双版纳</a>
                <a href="#">拉萨</a>
                <a href="#">成都</a>
                <a href="#">重庆</a>
                <a href="#">长白山</a>
                <a href="#">厦门</a>
                <a href="#">长沙</a>
                <a href="#">桂林</a>
                <a href="#">北京</a>
                <a href="#">西安</a>
                <a href="#">敦煌</a>
                <a href="#">杭州</a>
                <a href="#">上海</a>
                <a href="#">无锡</a>
                <a href="#">南京</a>
                <a href="#">广州</a>
                <a href="#">黄山</a>
                <a href="#">莫干山</a>
                <a href="#">新疆</a>
                <a href="#">北海</a>
                <a href="#">九华山</a>
                <a href="#">太原</a>
                <a href="#">张家口</a>
            </dd>
        </dl>
        <dl>
            <dt>国内热门景点</dt>
            <dd>
                <a href="#">北京故宫</a>
                <a href="#">东北滑雪</a>
                <a href="#">恭王府</a>
                <a href="#">长城</a>
                <a href="#">青城山大熊猫基地</a>
                <a href="#">峨眉山</a>
                <a href="#">都江堰</a>
                <a href="#">长恨歌表演</a>
                <a href="#">兵马俑</a>
                <a href="#">大唐芙蓉园</a>
                <a href="#">三亚日游</a>
                <a href="#">厦门鼓浪屿</a>
                <a href="#">千岛湖</a>
                <a href="#">呼伦贝尔草原</a>
                <a href="#">希拉穆仁草原</a>
                <a href="#">大理日游</a>
                <a href="#">杭州</a>
                <a href="#">重庆两江夜游船票</a>
            </dd>
        </dl> -->
    </div>
    {{/each}}

鼠标触碰每个一级菜单后显示对应的加载中组件,但是这里循环不会弄了。{{each xxx}}后面的xxx应该用什么,在获取data数据是可以打印出data的长度属性6,直接用data也不对。也没有each data.length这种用法吧。老师该怎么处理。

正在回答 回答被采纳积分+1

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

2回答
好帮手慕小李 2022-09-15 10:24:03

同学你好,老师看同学的思路是说当鼠标移入一级菜单的时候,在二级菜单显示出数据前先做loading是么?如果是同学这里思路就显得复杂了,如果当鼠标移入每一个一级菜单的选项都要添加一份loading这样也会让程序代码更加臃肿,那么同学可以将这个loading直接添加到二级菜单的js中去,另如果这里使用Promise.all其实loading状态其实有没有都没问题的。

如下仅供参考,二级菜单:

https://img1.sycdn.imooc.com//climg/63228c2f09df25e707660439.jpg

https://img1.sycdn.imooc.com//climg/63228c620932dd8f14330950.jpg

因为数据的缘故,同学如果希望将二级菜单写成模板嵌套的方式,那么这里有个数据结构的小坑,同学看看上面的思路,希望能给同学帮助。另如果这里没有写出来,那么可以先不用循环的方式写,等项目作业做完了以后,提交项目作业,批改项目作业的老师会给同学一套方案的。

祝学习愉快!


  • 提问者 慕仙7313728 #1

    老师,截图一种的{{each items}}中的items是如何获取的?

    2022-09-15 12:56:22
  • 好帮手慕小李 回复 提问者 慕仙7313728 #2

    同学你好,这里的items就是下图标注红线的items,也就是render传递过去的。

    https://img1.sycdn.imooc.com//climg/6322b2560982d4d113760342.jpg

    那么这里要注意的一点是,同学如在一级菜单获取数据时会发现获取回来的数据结构是这样的:

    https://img1.sycdn.imooc.com//climg/6322b38709406c4b05460216.jpg

    那么我们可以在template中做如下渲染:

    https://img1.sycdn.imooc.com//climg/6322b3a309183f2007280361.jpg

    但是我们在二级菜单中获取的数据结构与一级菜单获取的并不一样。

    https://img1.sycdn.imooc.com//climg/6322b42409a7440407160211.jpg

    那么如果同学想把二级菜单也使用模板引擎的话,在原有的数据基础上,要针对当前的dom结构进行数据重新拼接。

    如果二级菜单是使用如下模板:

    https://img1.sycdn.imooc.com//climg/6322b4750935835007070436.jpg

    以下是希望二级菜单得到的数据结构:

    https://img1.sycdn.imooc.com//climg/6322b49e09fc99e406450266.jpg

    https://img1.sycdn.imooc.com//climg/6322b4e909a8c9c613050333.jpg

    同学看看能否看懂。

    祝学习愉快!

    2022-09-15 13:15:56
好帮手慕久久 2022-09-15 10:00:54

同学你好,一级菜单一共有6个,那么二级菜单也应该有6个。鼠标移入一级菜单后,需要先将对应二级菜单的数据请求回来,然后渲染到合适的dom元素中。老师给你提供一种简单的方式,供你参考:

相关js:

https://img1.sycdn.imooc.com//climg/6322865a092a923209290509.jpg

上图中,render方法对应的模板:

https://img1.sycdn.imooc.com//climg/632286b00942799e07930780.jpg

https://img1.sycdn.imooc.com//climg/632286d309a549b008470632.jpg

同学参考上述思路,如果实现不了,建议将该功能空着,把其他功能写完后提交作业。批复作业的老师,会根据同学的代码,帮你实现、优化或者提供实现思路的。

祝学习愉快!

  • 提问者 慕仙7313728 #1

    你好老师,根据老师的例子,模仿着写,可以实现了。有些问题想问一下

    1:这6个二级菜单不能直接像一级菜单那样用{{each}}循环出6个吗?这里是直接写6个模板。

    2:这下面是按照老师提供的代码找着写的,按照道理是不是应该写在index.js中,我这里是仍旧写在旧的menu.js中。因为index.js中获取不到每个二级菜单的元素(var liss = document.querySelectorAll('.lis'))。

    然后render2中的名值对items是自己取名的吗?因为数据中没发现这个items和type。

    for(let i=0;i<liss.length;i++){
            liss[i].onmouseenter=function(){
              getData(`${URL}/${liss[i].dataset.n}`).then(data=>{
                console.log(data);
                for (const rs of rightShows) {
                    rs.innerHTML=render2({
                        items:data,
                        type:liss[i].dataset.n
                    })
                }
              })  
            }
        }

    3:有个关于主菜单一级菜单的问题:

    这个是我的一级菜单,不明白为什么{{each}}就能直接循环出6个一级菜单。

    像一级菜单里面的子菜单都是以{{each xxx}}这种形式循环出需要的个数。

    {{each}}
    <li class='lis' data-n="{{$value.key}}">
        <dl class="banner_dl">
            <dt>{{$value.title}}</dt>
            <dd>
                {{each $value.subTitles}}
                <span>{{$value}}</span>
                {{/each}}
               
            </dd>
        </dl>
        <div class=" banner-icon"></div>
        <div class=" banner-icon right-icon"></div>
    </li>
    {{/each}}


    2022-09-15 12:52:50
  • 好帮手慕久久 回复 提问者 慕仙7313728 #2

    解答如下:

    1、6个二级菜单的模板可以通过遍历生成,给同学举个例子:

    https://img1.sycdn.imooc.com//climg/6322ba660909db3a05760308.jpg

    先写一个二级菜单的框架模板:

    https://img1.sycdn.imooc.com//climg/6322b7db09ec7f6008040315.jpg

    在一级菜单数据请求回来时,渲染二级菜单框架:

    https://img1.sycdn.imooc.com//climg/6322b81b092c048907780709.jpg

    鼠标移入一级菜单后,获取二级菜单中对应元素,并渲染数据:

    https://img1.sycdn.imooc.com//climg/6322b89d095416e011100775.jpg

    其中,test.art代码如下:

    https://img1.sycdn.imooc.com//climg/6322b8c709c6d37f08350276.jpg

    代码的实现方式并不唯一,老师之前只是提供了一种简单的实现方式,更多方式同学可以自己探索。

    2、二级菜单的js代码,位置需要斟酌一下。可能会出现同学提到的获取不到二级菜单元素的情况。我个人是把二级菜单代码写在一个额外的js中,然后渲染完一级菜单数据后,再调用二级菜单的js代码:

    https://img1.sycdn.imooc.com//climg/6322b96e0995d13a08310752.jpg

    同学可以参考上述思路调整。

    3、items是自己取得名字。

    https://img1.sycdn.imooc.com//climg/6322b9a9098785b007620138.jpg    


    https://img1.sycdn.imooc.com//climg/6322b9b609d9f1ad06550198.jpg

    4、我这边测试直接使用each无法循环出数据,怀疑是模板版本不同造成的。建议同学按照标准写法写,防止出现问题:

    https://img1.sycdn.imooc.com//climg/6322ba0a09a9a5cc05770279.jpg


    2022-09-15 13:37:18
  • 提问者 慕仙7313728 回复 好帮手慕久久 #3

    你好老师,我明白了原来JS中的render传什么数据模板上就用什么数据。一级菜单之前我直接传的render(data)所以一级模板只能写{{each}},现在将一级的render传的数据改成({

    item:data

    }),然后就是{{each item}},因为我看一级数据传的时候好像就是一个对象,所以就直接传了data,这样也可以吧?

    2022-09-15 16:11:16
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

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