可切换布局的产品列表

JavaScriptJavaScriptBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

在这个项目中,你将学习如何创建一个具有切换功能的响应式产品列表布局。此功能允许用户轻松地在产品项的网格视图和列表视图之间切换。

👀 预览

响应式布局切换演示

🎯 任务

在这个项目中,你将学习:

  • 如何设置项目结构并理解每个文件和文件夹的用途
  • 如何从 JSON 文件中获取数据并填充产品列表
  • 如何使用 Vue.js 实现布局切换功能
  • 如何根据所选视图有条件地渲染网格和列表布局

🏆 成果

完成此项目后,你将能够:

  • 有效地构建 Vue.js 项目
  • 使用 Axios 从 JSON 文件中获取数据
  • 利用 Vue.js 指令(如 v-ifv-else)有条件地渲染内容
  • 处理用户交互并相应地更新用户界面

Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL javascript(("JavaScript")) -.-> javascript/BasicConceptsGroup(["Basic Concepts"]) javascript(("JavaScript")) -.-> javascript/AdvancedConceptsGroup(["Advanced Concepts"]) javascript(("JavaScript")) -.-> javascript/DOMManipulationGroup(["DOM Manipulation"]) javascript(("JavaScript")) -.-> javascript/NetworkingGroup(["Networking"]) javascript/BasicConceptsGroup -.-> javascript/cond_stmts("Conditional Statements") javascript/AdvancedConceptsGroup -.-> javascript/async_prog("Asynchronous Programming") javascript/DOMManipulationGroup -.-> javascript/dom_manip("DOM Manipulation") javascript/DOMManipulationGroup -.-> javascript/event_handle("Event Handling") javascript/NetworkingGroup -.-> javascript/http_req("HTTP Requests") javascript/NetworkingGroup -.-> javascript/json("JSON") subgraph Lab Skills javascript/cond_stmts -.-> lab-445753{{"可切换布局的产品列表"}} javascript/async_prog -.-> lab-445753{{"可切换布局的产品列表"}} javascript/dom_manip -.-> lab-445753{{"可切换布局的产品列表"}} javascript/event_handle -.-> lab-445753{{"可切换布局的产品列表"}} javascript/http_req -.-> lab-445753{{"可切换布局的产品列表"}} javascript/json -.-> lab-445753{{"可切换布局的产品列表"}} end

设置项目结构

在这一步中,你将学习如何为布局切换项目设置项目结构。请按照以下步骤完成此操作:

  1. 打开此项目的项目文件夹。目录结构如下:
├── css
├── images
├── js
│    ├── axios.min.js
│    └── vue.js
├── goodsList.json
└── index.html
  1. 熟悉每个文件夹和文件的用途:

    • css:此文件夹用于存放样式文件。
    • images:此文件夹用于存放图像。
    • js/vue.js:这是 Vue 2.x 文件。
    • js/axios.min.js:这是 Axios 文件。
    • goodsList.json:这是请求所需的数据。
    • index.html:此文件包含页面布局和逻辑。
  2. 点击 WebIDE 右下角的“Go Live”按钮来运行项目。

  3. 在虚拟机顶部打开“Web 8080”并手动刷新以查看页面。

实现数据获取

在这一步中,你将学习如何获取项目所需的数据。请按照以下步骤完成此操作:

  1. index.html 文件中,找到文件底部的 <script> 标签。
  2. <script> 标签内,使用 new Vue() 创建一个新的 Vue 实例。
  3. 在 Vue 实例的 data 选项中,添加一个 goodsList 属性并将其初始化为一个空数组。
  4. 在 Vue 实例的 mounted 钩子函数中,使用 Axios 从 goodsList.json 文件中获取数据。
  5. 用获取到的数据更新 goodsList 数据属性。

你的代码应该类似于以下内容:

var vm = new Vue({
  el: "#app",
  data: {
    goodsList: []
  },
  mounted() {
    axios.get("./goodsList.json").then((res) => (this.goodsList = res.data));
  }
});

实现布局切换

在这一步中,你将学习如何实现产品列表布局切换的功能。请按照以下步骤完成此操作:

  1. index.html 文件中,找到 <div class="bar"> 元素。
  2. 在该元素内部,分别添加两个类名为 grid-iconlist-icon<a> 元素。
<div class="bar">
  <a class="grid-icon"></a>
  <a class="list-icon"></a>
</div>
  1. 在 Vue 实例中创建一个 changeBar 数据属性,用于跟踪当前布局,将默认值设置为 0,即默认使用网格布局。
var vm = new Vue({
  el: "#app",
  data: {
    changeBar: 0
    //...
  }
});
  1. 为每个 <a> 元素绑定 @click 事件,当点击 grid-icon 时,将 changeBar 设置为 0,并为 grid-icon 添加 active 类。从 list-icon 中移除 active 类。
<div class="bar">
  <a
    class="grid-icon"
    :class="changeBar == 0? 'active' : ''"
    @click="changeBar = 0"
  ></a>
  <!--... -->
</div>
  1. 为每个 <a> 元素绑定 @click 事件,当点击 list-icon 时,将 changeBar 设置为 1,并为 list-icon 添加 active 类。从 grid-icon 中移除 active 类。
<div class="bar">
  <!--... -->
  <a
    class="list-icon"
    :class="changeBar == 1? 'active' : ''"
    @click="changeBar = 1"
  ></a>
</div>
  1. 使用 v-ifv-else 指令,根据 changeBar 的值有条件地渲染网格和列表布局。
<ul class="grid" v-if="changeBar == 0">
  <li v-for="item in goodsList">
    <a :href="item.url" target="_blank">
      <img :src="item.image.large" />
    </a>
  </li>
</ul>
<ul class="list" v-else>
  <li v-for="item in goodsList">
    <a :href="item.url" target="_blank">
      <img :src="item.image.small" />
    </a>
    <p>{{item.title}}</p>
  </li>
</ul>

完成项目

在这最后一步中,你将检查已完成的项目并确保它满足要求。

  1. 验证是否从 goodsList.json 文件中正确获取了数据。
  2. 确保布局切换功能按预期工作:
    • 点击网格图标会将布局更改为网格视图,并为网格图标添加 active 类。
    • 点击列表图标会将布局更改为列表视图,并为列表图标添加 active 类。
  3. 通过点击图标来测试项目,并确保布局按预期更改。

恭喜你!你已完成布局切换项目。你已经学会了如何:

  • 设置项目结构
  • 从 JSON 文件中获取数据
  • 使用 Vue.js 实现布局切换功能
✨ 查看解决方案并练习

总结

恭喜你!你已经完成了这个项目。你可以在 LabEx 中练习更多实验来提升你的技能。