一、环境搭建

在开始之前,确保你的开发环境已经安装了Node.js和npm(Node.js包管理器)。你可以从Node.js官方网站下载适合你操作系统的安装包进行安装。

    安装Node.js和npm

    • 访问Node.js官方网站(
    • 安装完成后,打开终端,输入以下命令检查版本:
      
      node -v
      npm -v
      

    创建Vue项目

    • 打开终端,使用以下命令创建一个新的Vue项目:
      
      vue create my-dynamic-list-project
      
    • 在创建过程中,你可以选择默认配置或手动配置。

    启动项目

    • 进入项目目录,运行以下命令启动本地开发服务器:
      
      npm run serve
      
    • 默认访问地址是http://localhost:8080/

二、组件基础

    创建组件文件

    • src/components目录下创建一个新的.vue文件,例如DynamicList.vue

    组件结构

    • 一个基本的.vue组件文件包含三个部分:<template>, <script>, 和 <style>
   <template>
     <div class="dynamic-list">
       <ul>
         <li v-for="item in listData" :key="item.id">
           <img :src="item.image" :alt="item.title">
           <h3>{{ item.title }}</h3>
           <p>{{ item.description }}</p>
         </li>
       </ul>
     </div>
   </template>

   <script>
   export default {
     data() {
       return {
         listData: [
           {
             id: 1,
             image: 'path/to/image1.jpg',
             title: '标题1',
             description: '这是描述1'
           },
           // ...更多数据项
         ]
       };
     }
   };
   </script>

   <style scoped>
   .dynamic-list ul {
     list-style: none;
     padding: 0;
   }
   .dynamic-list li {
     margin-bottom: 20px;
   }
   .dynamic-list img {
     width: 100px;
     height: auto;
   }
   </style>

三、组件通信

  1. 父组件传递数据: “`vue

## 四、动态组件

对于动态高度不固定的图文列表,我们可以使用Vue的`v-height`指令来确保列表的高度自适应。

```vue
<template>
  <div class="dynamic-list">
    <ul>
      <li v-for="item in listData" :key="item.id" v-height="item.height">
        <img :src="item.image" :alt="item.title">
        <h3>{{ item.title }}</h3>
        <p>{{ item.description }}</p>
      </li>
    </ul>
  </div>
</template>

<script>
export default {
  // ...
};
</script>

<style scoped>
/* ... */
</style>

五、插槽(Slot)

<template>
  <div class="dynamic-list">
    <ul>
      <li v-for="item in listData" :key="item.id">
        <img :src="item.image" :alt="item.title">
        <h3>{{ item.title }}</h3>
        <p>{{ item.description }}</p>
        <slot name="extra-content"></slot>
      </li>
    </ul>
  </div>
</template>

<script>
export default {
  // ...
};
</script>

<style scoped>
/* ... */
</style>

在父组件中,