Day 09:遍历资料好便利-v-for

目前为止,我们成功引入了 BootstrapVue 的元件 Navbar,也调整了样式和内容。
navbar

突然发现少放了一个重要项目,於是赶紧补上一个 <b-nav-item>:

<b-navbar-nav class="my_navbar_item">
	<b-nav-item href="#">全部书单</b-nav-item>
	<b-nav-item href="#">七折区</b-nav-item>
	<b-nav-item href="#">五折区</b-nav-item>
	<b-nav-item href="#">iT邦帮忙铁人赛系列书</b-nav-item>
</b-navbar-nav>

边新增边思考,如果项目愈来愈多,这串 <b-nav-item> 不就会跟着愈来愈长吗?看到重复的程序码,就会觉得说不定有其他写法可以解决。

template 里的 forEach

首先,在 <script> 把这串 <b-nav-item> 整理成一个名为 navList 的阵列资料。

<script>
export default {
  name: "Navbar",
  data() {
    return {
      navList: [
        { id: 1, item: "全部书单" },
        { id: 2, item: "七折区" },
        { id: 3, item: "五折区" },
        { id: 4, item: "iT邦帮忙铁人赛系列书" },
      ],
    };
  },
};
</script>

接着,在 <template> 使用 v-for 遍历出 navList 的各个项目,显示在画面上的内容则以模版语法更新插值 data

<b-navbar-nav
	class="my_navbar_item"
	v-for="navItem in navList"
	:key="navItem.id"
>
	<b-nav-item href="#">{{ navItem.item }}</b-nav-item>
</b-navbar-nav>

如果一时之间搞不清楚它们的内容和关系,可以用阵列资料的方式来帮助理解。

  • navList:一个阵列资料,包含四组物件内容
  • navItem:逐一被阵列遍历的元素,等同於这四组物件
  • item:物件里的 key 值
  • navItem.item:物件属性取值,取得 item 对应的 value 值
const navList = [
  { id: 1, item: "全部书单" },
  { id: 2, item: "七折区" },
  { id: 3, item: "五折区" },
  { id: 4, item: "iT邦帮忙铁人赛系列书" },
];

navList.forEach(navItem => console.log(navItem));
// { id: 1, item: '全部书单' }
// { id: 2, item: '七折区' }
// { id: 3, item: '五折区' }
// { id: 4, item: 'iT邦帮忙铁人赛系列书' }

因此在 <template> 的模版语法中,{{ navItem.item }} 渲染出来的资料其实就是 item 对应的 value 名称,渲染结果跟一开始在 <template> 中全部条列式的写法一模一样。
new navbar

有些人可能会好奇,虽然 <template> 变得简洁了,但资料全都跑到 <script>,程序码行数不是差不多吗?

起初会使用 v-for 渲染列表,其实原因很单纯,就是想要练习在各种情境使用 Vue 的语法而已,主要也是觉得 HTML 内容有重复的迹象,感觉很适合这般处理。或许也有人会觉得在导览列使用 v-for 有些大才小用,毕竟资料量也不多何必跑个回圈遍历?

但是经过这番调整,我的体会是只要我先完善 <template> 的画面架构,让它只需要负责渲染在 <script> 准备好的资料即可,如此一来我就可以集中在 data 管理所有资料,也能快速的处理新增、修改、删除等内容调整。我不用再回到 HTML 从可能很巢状的标签海里找到文字落点,只需要将变数命名的足够名符其实,那麽在 data 中便能快速查找到对应内容并予以更新。不知道大家偏好哪一种处理方式呢?

参考资料


<<:  【10】多分类问题下 Sparse Cross Entropy 与 Categorical Cross Entropy 的用法差异

>>:  前言

Day16:SwiftUI—GeometryReader

前言 前面几天介绍了很多设计 SwiftUI 画面的元件, 那要怎麽知道元件的位置和尺寸大小呢? 这...

【第二十八天 - 系统设计 介绍】

Q1. 系统设计 是什麽 在业界基本上都是团队开发专案,每个人负责实作部分功能,而 Leetcode...

[2020铁人赛] Day26 - 用DocX汇出Word档案

今天来讲一下user的需求,要汇出一份word档,并且需要套上参数并替换值,其实nuget上有很多套...

[Day15] 利用 Vue CLI 3 来建立 Web Components 的 JS 档

前面花了大把的时间 , 来建立跟 Vue 很像的 Web Components 其实 Vue CLI...

[Lesson2] Android Studio安装

在开发Android App之前,要先准备好合适的开发工具,而我这次开发Android App的环境...