当前位置: 首页 > article >正文

【Vue】-组件开发

Vue 组件开发指南

1. 创建基础组件
  • 使用 Vue.component<script setup> 来定义全局或局部组件。
  • 示例:
    <template>
      <div class="example">
        <h1>{{ title }}</h1>
        <p>{{ content }}</p>
      </div>
    </template>
    
    <script>
    export default {
      name: 'ExampleComponent',
      props: {
        title: String,
        content: String
      }
    }
    </script>
    
    <style scoped>
    .example {
      border: 1px solid #ccc;
      padding: 16px;
      margin: 16px 0;
    }
    </style>
    
2. 使用 Props 传递数据
  • 父组件通过 props 向子组件传递数据。
  • 示例:
    <!-- 父组件 -->
    <template>
      <div>
        <ExampleComponent :title="pageTitle" :content="pageContent" />
      </div>
    </template>
    
    <script>
    import ExampleComponent from './ExampleComponent.vue';
    
    export default {
      components: {
        ExampleComponent
      },
      data() {
        return {
          pageTitle: '欢迎来到我的页面',
          pageContent: '这是一个示例内容。'
        };
      }
    }
    </script>
    
3. 使用 Events 进行通信
  • 子组件通过 $emit 触发事件,父组件监听这些事件。
  • 示例:
    <!-- 子组件 -->
    <template>
      <button @click="handleClick">点击我</button>
    </template>
    
    <script>
    export default {
      methods: {
        handleClick() {
          this.$emit('custom-event', '这是一个自定义事件');
        }
      }
    }
    </script>
    
  <!-- 父组件 -->
  <template>
    <div>
      <ChildComponent @custom-event="handleCustomEvent" />
    </div>
  </template>

  <script>
  import ChildComponent from './ChildComponent.vue';

  export default {
    components: {
      ChildComponent
    },
    methods: {
      handleCustomEvent(message) {
        console.log(message);
      }
    }
  }
  </script>
4. 使用 Slots 实现内容分发
  • 通过 slot 可以在组件中插入动态内容。
  • 示例:
    <!-- 子组件 -->
    <template>
      <div class="card">
        <header>
          <slot name="header"></slot>
        </header>
        <main>
          <slot></slot>
        </main>
        <footer>
          <slot name="footer"></slot>
        </footer>
      </div>
    </template>
    
    <script>
    export default {
      name: 'CardComponent'
    }
    </script>
    
    <style scoped>
    .card {
      border: 1px solid #ccc;
      padding: 16px;
      margin: 16px 0;
    }
    </style>
    
  <!-- 父组件 -->
  <template>
    <div>
      <CardComponent>
        <template #header>
          <h1>标题</h1>
        </template>
        <p>这是主要内容。</p>
        <template #footer>
          <button>按钮</button>
        </template>
      </CardComponent>
    </div>
  </template>

  <script>
  import CardComponent from './CardComponent.vue';

  export default {
    components: {
      CardComponent
    }
  }
  </script>
5. 使用 Vuex 进行状态管理
  • 对于复杂的应用,可以使用 Vuex 来管理应用的状态。

  • 安装 Vuex:

    npm install vuex --save
    
  • 示例:

    // store.js
    import Vue from 'vue';
    import Vuex from 'vuex';
    
    Vue.use(Vuex);
    
    export default new Vuex.Store({
      state: {
        count: 0
      },
      mutations: {
        increment(state) {
          state.count++;
        }
      },
      actions: {
        increment({ commit }) {
          commit('increment');
        }
      },
      getters: {
        count: state => state.count
      }
    });
    
  <!-- App.vue -->
  <template>
    <div>
      <p>当前计数: {{ count }}</p>
      <button @click="increment">增加</button>
    </div>
  </template>

  <script>
  import { mapState, mapActions } from 'vuex';

  export default {
    computed: {
      ...mapState(['count'])
    },
    methods: {
      ...mapActions(['increment'])
    }
  }
  </script>
6. 使用 Router 进行路由管理
  • 对于多页面应用,可以使用 Vue Router 进行路由管理。

  • 安装 Vue Router:

    npm install vue-router --save
    
  • 示例:

    // router.js
    import Vue from 'vue';
    import Router from 'vue-router';
    import Home from './components/Home.vue';
    import About from './components/About.vue';
    
    Vue.use(Router);
    
    export default new Router({
      routes: [
        {
          path: '/',
          name: 'home',
          component: Home
        },
        {
          path: '/about',
          name: 'about',
          component: About
        }
      ]
    });
    
  <!-- App.vue -->
  <template>
    <div id="app">
      <nav>
        <router-link to="/">首页</router-link>
        <router-link to="/about">关于</router-link>
      </nav>
      <router-view></router-view>
    </div>
  </template>

  <script>
  import router from './router';

  export default {
    router
  }
  </script>

以上是 Vue 组件开发的最简单的一个例子


http://www.kler.cn/a/388522.html

相关文章:

  • qt QProcess详解
  • 车载空气净化器语音芯片方案
  • 《深度解析 C++中的弱引用(weak reference):打破循环依赖的利器》
  • Java设计模式面试题及参考答案
  • 想租用显卡训练自己的网络?AutoDL保姆级使用教程(PyCharm版)
  • uniapp 设置安全区域
  • 【Vue】Vue3.0(十八)Vue 3.0中‘props‘一种使用频率最高的通信方式(全面解析)
  • MML 中使用 libevent +std::async unix socket domain 进程间通信
  • RT-Thread 配置工具
  • 英国留学论文写作中复合句式基础知识讲解
  • 算法复杂度
  • 【SpringMVC】记录一次Bug——mvc:resources设置静态资源不过滤导致WEB-INF下的资源无法访问
  • W3C HTML 活动
  • springboot使用aop防御用户重复请求
  • Centos Linux 7 搭建邮件服务器(postfix + dovecot)
  • cv2.threshold利用OSTU方法分割图像的前景和背景
  • 从文本到图像:AIGC 如何改变内容生产的未来
  • 羲和数据集收集器1.0
  • Leetcode 3347. Maximum Frequency of an Element After Performing Operations II
  • 【k8s】ClusterIP能http访问,但是不能ping 的原因
  • 「C/C++」C/C++STL篇 之 数组赋值给std::vector多种方法
  • Ubuntu 的 ROS 2 操作系统安装与测试
  • 基于Diodes全新的140瓦PD3.1超高功率密度GaN充电器解决方案
  • 海量日志收集ELK实战(docker部署ELK)从日志中挖取宝贵数据
  • 云防护单节点2T抗攻击能力意味着什么?
  • 《深入浅出HTTPS​​​​​​​》读书笔记(7):安全的密码学Hash算法