分分钟玩转Vue.js组件(二)

yizhihongxing

让我来详细讲解一下“分分钟玩转Vue.js组件(二)”的完整攻略。

简介

Vue.js 是一款非常流行的 JavaScript 库,用于构建用户界面。Vue.js 具有简单易学、轻量灵活、响应式渲染及组件化等特点, 非常适合构建现代化的 Web 应用程序。

本篇文章将带大家深入了解 Vue.js 中的组件化,在掌握基本概念后,教你如何使用 Vue.js 构建高效、灵活、可重用的组件。

Vue.js 组件

Vue.js 的组件是具有复用性、可组合性和高扩展的利器,使用组件可以将代码划分为小的、独立的组件,提高代码复用和可维护性。

Vue.js 中的组件是通过 Vue.extend() 方法来创建的,每个组件包括一个模板(template)、一个组件类型(type)和一个数据(data),可以拥有自己的生命周期钩子函数(lifecycle hooks)、数据属性(data properties)和计算属性(computed properties)。

以下是一个简单的组件的示例:

Vue.component('my-component', {
    template: '<div>{{ message }}</div>',
    data: function(){
        return {
            message: 'Hello, Vue!'
        }
    }
})

我们使用 Vue.component() 方法来创建一个名为 my-component 的组件,组件的模板使用了 Vue.js 的文本插值功能,并使用了一个名为 message 的数据属性,通过 data 函数来返回数据对象,以实现数据驱动的渲染。

接下来,将通过两个实际例子来说明如何使用 Vue.js 搭建组件并进行拆分。

示例1 - TodoList

本示例实现的是一个 TodoList 组件,包含添加、删除、修改和列表展示等功能。

在这个示例中,我们将创建一个名为 'todo-list' 的组件,组件的模板包含一个输入框和一个按钮,用于添加新任务,以及一个任务列表。同时,我们将为组件添加一个 prop 属性,用来控制是否展示已完成的任务列表。

<template>
  <div>
    <h2>Todo List</h2>
    <div>
      <input type="text" v-model="newTodo">
      <button @click="addTodo">Add Todo</button>
    </div>
    <div>
      <ul>
        <li v-for="(todo, index) in todos" :key="todo.id">
          <input type="checkbox" v-model="todo.completed">
          <span :class="{completed: todo.completed}">{{ todo.title }}</span>
          <button @click="deleteTodo(index)">Delete</button>
        </li>
      </ul>
    </div>
    <div v-if="showCompleted">
      <h3>Completed Todos</h3>
      <ul>
        <li v-for="(todo, index) in completedTodos" :key="todo.id">
          <input type="checkbox" v-model="todo.completed">
          <span :class="{completed: todo.completed}">{{ todo.title }}</span>
          <button @click="deleteCompleted(index)">Delete</button>
        </li>
      </ul>
    </div>
  </div>
</template>

<script>
  export default {
    name: 'TodoList',
    props: {
      showCompleted: {
        type: Boolean,
        default: false
      }
    },
    data () {
      return {
        newTodo: '',
        todos: [
          { id: 1, title: 'Learn Vue.js', completed: false },
          { id: 2, title: 'Build an app', completed: true }
        ]
      }
    },
    computed: {
      completedTodos () {
        return this.todos.filter(todo => todo.completed)
      }
    },
    methods: {
      addTodo () {
        if (!this.newTodo) return
        this.todos.push({
          id: this.todos.length + 1,
          title: this.newTodo,
          completed: false
        })
        this.newTodo = ''
      },
      deleteTodo (index) {
        this.todos.splice(index, 1)
      },
      deleteCompleted (index) {
        this.completedTodos.splice(index, 1)
      }
    }
  }
</script>

<style>
  .completed {
    text-decoration: line-through;
  }
</style>

在上述代码中,我们定义了一个名为 TodoList 的组件,该组件中包含了添加、删除、修改和列表展示等功能。

其中,模板部分包括了添加任务的输入框和按钮,以及任务列表、已完成任务列表。还定义了一个 showCompleted 的 prop 属性,用来控制已完成任务列表的显示与隐藏。

在组件的 data 中我们定义了 todos 数组,包含了已经添加的任务项。

通过 computed 属性,我们定义了 completedTodos 计算属性,用来计算已完成的任务列表,以及一个初始化的 newTodo 变量,用于添加新任务。

在 addTodo 和 deleteTodo 方法中,我们使用了 todos 数组来添加和删除任务项,其中 deleteTodo 方法将删除选择的任务项。

最后,我们使用了带参数的 deleteCompleted 方法,在 completedTodos 中删除已选择的已完成任务项。

示例2 - Modal

Modal 是一种常见的 UI 组件,在 Vue.js 中同样可以使用组件实现。

在这个示例中,我们将创建一个名为 Modal 的组件,包含了打开、关闭、以及向组件传递数据的功能。

<template>
  <transition name="modal">
    <div v-if="isShow">
      <div class="modal-mask" @click="close"></div>
      <div class="modal-wrapper">
        <div class="modal-container">
          <h3>{{ title }}</h3>
          <div>{{ content }}</div>
          <div class="modal-footer">
            <button @click="close">Cancel</button>
            <button @click="submit">Confirm</button>
          </div>
        </div>
      </div>
    </div>
  </transition>
</template>

<script>
  export default {
    name: 'Modal',
    props: {
      isShow: Boolean,
      title: {
        type: String,
        default: 'Title'
      },
      content: String
    },
    methods: {
      close () {
        this.$emit('close')
      },
      submit () {
        this.$emit('submit')
      }
    }
  }
</script>

<style>
  .modal-mask {
    position: fixed;
    top: 0;
    right: 0;
    bottom: 0;
    left: 0;
    background: rgba(0, 0, 0, 0.5);
    z-index: 9998;
  }
  .modal-wrapper {
    position: fixed;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    z-index: 9999;
  }
  .modal-container {
    background-color: #fff;
    padding: 20px;
  }
</style>

在上述代码中,我们定义了一个名为 Modal 的组件,该组件模板包括了一个具有渐变效果的面板,以及标题、内容、取消和确认按钮。

在 props 中我们定义了 isShow、title 和 content 等属性,用于控制 Modal 组件的打开状态、标题和内容。通过 $emit() 函数,我们在关闭和确认Modal时触发相应的自定义事件。

最后,我们定义了一些基本的样式属性,以实现 Modal 的弹出、居中和渐变效果。

总结

本文对 Vue.js 组件化进行了深入的介绍,并结合两个实际例子对 Vue.js 组件的开发和使用进行了详细的讲解。

组件化是现代化 Web 开发的重要组成部分,它可以提高代码复用和可维护性,为开发者提供更加高效、灵活、可重用的代码书写方式。

希望今天的分享能够帮助到你,让你更好的掌握 Vue.js 组件化的核心概念和开发技巧。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:分分钟玩转Vue.js组件(二) - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • vue使用节流函数的踩坑实例指南

    下面我来给出详细讲解vue使用节流函数的踩坑实例指南。 什么是函数节流? 函数节流是控制函数被调用的频率,让函数只在指定的时间间隔内执行一次,前提是该函数在该时间间隔内多次调用,节省计算资源。常用于优化浏览器滚动、窗口大小变化等事件的监听回调函数。 为什么要使用节流函数? 在处理一些用户频繁触发的事件时(例如滚动、拖动),如果不使用函数节流来限制操作的频率,…

    Vue 2023年5月28日
    00
  • vue中data里面的数据相互使用方式

    Vue是一款流行的前端框架。data对象是Vue组件中的一个非常重要的属性。在Vue组件中,我们可以定义数据、方法、计算属性等。data对象中定义的数据可以在Vue实例的模板中使用,也可以在Vue组件中的方法或计算属性中进行操作。 下面是在Vue中使用data里面的数据的几种方式: 直接使用 最基本的使用方法,就是在Vue实例或组件中使用this关键字直接访…

    Vue 2023年5月28日
    00
  • 基于vue实现多引擎搜索及关键字提示

    实现基于Vue的多引擎搜索及关键字提示主要包括以下步骤: 构建基础页面结构 在HTML文件中,构造基础的页面结构,包括搜索框和搜索按钮等必要的组件。同时,引入Vue.js库和相关依赖。 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> …

    Vue 2023年5月27日
    00
  • 基于CSS实现MaterialUI按钮点击动画并封装成 React 组件

    下面我会详细讲解如何基于CSS实现MaterialUI按钮点击动画并封装为React组件。 1.准备工作 安装MaterialUI 首先需要安装MaterialUI,可以使用npm或yarn进行安装。 npm install @material-ui/core //或使用yarn yarn add @material-ui/core 创建按钮组件 接着需要创…

    Vue 2023年5月27日
    00
  • vue中的过滤器及其时间格式化问题

    下面是关于 Vue 中过滤器的完整攻略,包括时间格式化问题。 什么是过滤器? Vue 中的过滤器是一种函数,用于改变数据的输出形式。可以在模板中使用管道符 | 的形式调用,对数据进行过滤和格式化,例如: {{ data | filter }} 其中 data 是需要过滤的数据,filter 是过滤器的名称,在 Vue 实例中定义。 过滤器有局限性,不能用于修…

    Vue 2023年5月27日
    00
  • vue实现pdf导出解决生成canvas模糊等问题(推荐)

    使用Vue实现PDF导出功能需要涉及到以下几个步骤: 安装依赖 npm install jspdf jspdf-autotable –save 引入jspdf和jspdf-autotable包 import jsPDF from ‘jspdf’ import ‘jspdf-autotable’ 编写导出PDF的方法 exportPdf() { // 新建一…

    Vue 2023年5月27日
    00
  • vue.js中$watch的用法示例

    下面是关于”vue.js中$watch的用法示例”的完整攻略: 1. 什么是$watch 在Vue.js中,我们经常需要使用到响应式数据,$watch是Vue.js提供的一个侦听器,用来监听某个数据项的变化,一旦该数据项发生变化,$watch负责触发回调函数,执行相应的操作。 2. $watch的基本用法 在Vue.js中,我们可以使用vm.$watch方法…

    Vue 2023年5月27日
    00
  • Vue用户管理的增删改查功能详解

    Vue用户管理的增删改查功能详解 本文将详细介绍如何使用Vue框架开发一个用户管理界面,包括用户的增加、删除、编辑和查询等功能。在实现这些功能的过程中,我们将使用Vue组件和常见的Web开发技术。本文的目标读者是已经了解基本的Vue知识和Web前端开发知识的开发者。 组件设计 我们先来考虑我们需要哪些组件和它们之间的关系。我们需要一个顶层组件来负责整个界面的…

    Vue 2023年5月28日
    00
合作推广
合作推广
分享本页
返回顶部