Vue.js前端框架教程1:Vue应用启动和Vue组件

ops/2024/12/22 1:32:43/

文章目录

        • Vue 应用
          • Vue 应用的主要组成部分:
          • 启动 Vue 应用:
        • Vue组件
          • 基础组件
          • 组件注册
          • 父子组件
          • 组件插槽(Slots)
          • 动态组件和 `keep-alive`

Vue 应用

Vue 应用由几个主要部分组成,每个部分都有其特定的角色和职责。以下是 Vue 应用的主要组成部分以及如何启动一个 Vue 应用的介绍:

Vue 应用的主要组成部分:
  1. Vue实例(Vue Instance)

    • Vue 应用的核心,所有的 Vue 功能都是围绕着 Vue 实例展开的。
    • 通过 new Vue({ ... }) 创建,其中大括号中的内容称为选项对象,可以包含数据、模板、方法等。
  2. 模板(Template)

    • Vue 实例的 template 选项定义了应用的 HTML 结构。
    • 使用声明式渲染,允许你将 DOM 操作逻辑分离到 JavaScript 代码中。
  3. 数据(Data)

    • Vue 实例的 data 选项定义了应用的数据模型。
    • Vue 实例的数据是响应式的,当数据变化时,视图会自动更新。
  4. 方法(Methods)

    • Vue 实例的 methods 选项定义了应用的行为。
    • 方法可以响应用户交互,如点击事件,并可以更改数据。
  5. 生命周期钩子(Lifecycle Hooks)

    • Vue 实例的不同生命周期阶段会触发不同的钩子函数。
    • 例如 createdmountedupdateddestroyed 等。
  6. 组件(Components)

    • Vue 的组件系统允许你将应用分解成独立、可复用的组件。
    • 组件有自己的模板、数据和方法。
  7. 指令(Directives)

    • Vue 提供了一系列内置指令,如 v-modelv-ifv-for 等。
    • 指令可以用于在模板中将 DOM 元素绑定到底层 Vue 实例的数据上。
  8. 插件(Plugins)

    • Vue 插件可以添加全局功能或通过全局方法、属性或组件扩展 Vue 的功能。
    • 例如 Vue Router、VuexVue CLI 都是插件。
启动 Vue 应用:
  1. 通过 CDN
    • 直接在 HTML 文件中通过 <script> 标签引入 Vue.js
    • 创建一个 Vue 实例并挂载到 DOM 元素上。
<!DOCTYPE html>
<html>
<head><title>Vue 应用</title><script src="https://unpkg.com/vue@3.2.31/dist/vue.global.prod.js"></script>
</head>
<body><div id="app">{{ message }}</div><script>const { createApp } = Vue;createApp({data() {return {message: 'Hello, Vue!'};}}).mount('#app');</script>
</body>
</html>
  1. 通过 Vue CLI

    • 使用 Vue CLI 创建项目,它提供了一个完整的开发环境,包括热重载、保存时 lint 检查等。
    • 通过运行 vue create my-project 创建新项目。
    • 进入项目目录,运行 npm run serveyarn serve 启动开发服务器。
  2. 通过单文件组件(Single File Components, SFC)

    • Vue CLI 项目中,可以使用 .vue 文件组织组件。
    • 每个 .vue 文件包含 <template><script><style> 三个部分。
<template><div>{{ message }}</div>
</template><script>
export default {data() {return {message: 'Hello, Vue SFC!'};}
}
</script><style scoped>
div {color: green;
}
</style>
  1. 通过 Vite
    • Vite 是一个现代化的前端构建工具,它利用了原生 ES 模块特性,提供了快速的冷启动和即时模块热更新。
    • 使用 Vite 创建项目,可以通过 npm create vite@latestyarn create vite
    • 运行 npm run devyarn dev 启动开发服务器。

通过这些方法,你可以快速启动和开发一个 Vue 应用。Vue 的灵活性和易用性使得从简单的项目到复杂的单页面应用的构建都变得简单快捷。

Vue组件

Vue 组件是 Vue.js 的核心概念之一,它是自定义的可复用的组件,可以包含自己的模板、逻辑和样式。组件系统是 Vue.js 的一个重要特性,它允许开发者将界面拆分成独立、可复用的小块,每一块都是一个带有独立功能的组件。

基础组件

Vue 中,一个组件可以简单地定义为一个包含 templatescriptstyle.vue 文件。以下是一个基础组件的例子:

<!-- MyComponent.vue -->
<template><div><h1>{{ message }}</h1><button @click="reverseMessage">反转消息</button></div>
</template><script>
export default {data() {return {message: 'Hello, Vue!'};},methods: {reverseMessage() {this.message = this.message.split('').reverse().join('');}}
}
</script><style scoped>
h1 {color: #42b983;
}
</style>
组件注册

Vue 应用中,你需要注册组件才能使用它们。可以在局部(单个文件)或全局注册组件。

  • 局部注册:
import MyComponent from './MyComponent.vue';export default {components: {MyComponent}
}
  • 全局注册:
import Vue from 'vue';
import MyComponent from './MyComponent.vue';Vue.component('my-component', MyComponent);
父子组件

Vue 组件可以创建父子关系,子组件可以通过 props 接收来自父组件的数据,并通过 $emit 向父组件发送事件。

  • 子组件(ChildComponent.vue):
<template><div><p>{{ message }}</p><button @click="notifyParent">通知父组件</button></div>
</template><script>
export default {props: ['message'],methods: {notifyParent() {this.$emit('message-from-child', 'Hello from child!');}}
}
</script>
  • 父组件:
<template><div><child-component :message="parentMessage" @message-from-child="handleMessageFromChild" /></div>
</template><script>
import ChildComponent from './ChildComponent.vue';export default {components: {ChildComponent},data() {return {parentMessage: 'Message from parent'};},methods: {handleMessageFromChild(message) {console.log(message); // 输出:Hello from child!}}
}
</script>
组件插槽(Slots)

插槽是 Vue.js 提供的一种分发内容的机制,允许你将内容从父组件传递到子组件的模板中。

  • 子组件(ChildComponent.vue):
<template><div><slot>默认内容</slot></div>
</template>
  • 父组件:
<template><child-component><p>这是通过插槽传递的内容</p></child-component>
</template><script>
import ChildComponent from './ChildComponent.vue';export default {components: {ChildComponent}
}
</script>
动态组件和 keep-alive

Vue 提供了 <component> 标签,允许你动态地切换不同的组件。

<template><component :is="currentComponent" />
</template><script>
export default {data() {return {currentComponent: 'ComponentA'};}
}
</script>

使用 keep-alive 可以缓存不活动的组件实例,避免重复创建和销毁组件的性能损耗。

<template><keep-alive><component :is="currentComponent" /></keep-alive>
</template>

Vue 组件是构建大型应用的基础,它们使得代码更加模块化、可维护和可复用。通过组合不同的组件,你可以构建出复杂的用户界面。


http://www.ppmy.cn/ops/143899.html

相关文章

Spring Boot 项目创建

创建一个新项目&#xff1a; 打开 Spring Initializr 网址&#xff1a;https://start.spring.io/ &#xff0c;然后创建一个新项目&#xff1a; springboot3.3.5_jdk17&#xff1a; Project&#xff08;Maven&#xff09;编程语言&#xff08;Java 17&#xff09;Spring Boo…

windows服务器Oracle TNS 远程监听器中毒

修复Oracle TNS 监听器远程中毒漏洞 1.1 修改监听文件 如何快速找到listener.ora &#xff1f; cmd输入 tnsping localhost 修改配置文件&#xff0c;路径以自己的实际路径为准&#xff0c;我都在D盘 listener.ora内容如下&#xff1a; #listener.ora Network Configuration F…

Docker监控新纪元:Prometheus引领高效容器监控革命

作者简介&#xff1a;我是团团儿&#xff0c;是一名专注于云计算领域的专业创作者&#xff0c;感谢大家的关注 •座右铭&#xff1a; 云端筑梦&#xff0c;数据为翼&#xff0c;探索无限可能&#xff0c;引领云计算新纪元 个人主页&#xff1a;团儿.-CSDN博客 目录 前言&…

【游戏中orika完成一个Entity的复制及其Entity异步落地的实现】 1.ctrl+shift+a是飞书下的截图 2.落地实现

一、orika工具使用 1)工具类 package com.xinyue.game.utils;import ma.glasnost.orika.MapperFactory; import ma.glasnost.orika.impl.DefaultMapperFactory;/*** author 王广帅* since 2022/2/8 22:37*/ public class XyBeanCopyUtil {private static MapperFactory mappe…

Java 和 J2EE 有什么不同?

Java 和 J2EE 有什么不同&#xff1f; 一. Java的理解二. 什么是 J2EE三. Java 和 J2EE 的主要区别四. 结论 前言 这是我在这个网站整理的笔记,有错误的地方请指出&#xff0c;关注我&#xff0c;接下来还会持续更新。 作者&#xff1a;神的孩子都在歌唱 Java 和 J2EE&#xff…

1688商品爬取:商品信息与价格接口获取指南

引言 在电商领域&#xff0c;获取商品信息和价格对于市场分析、价格监控和供应链管理至关重要。1688作为中国领先的B2B电商平台&#xff0c;提供了海量的商品数据。本文将详细介绍如何利用Java爬虫技术合法合规地获取1688商品信息和价格接口数据。 环境准备 在开始之前&…

发送webhook到飞书机器人

发送webhook到飞书机器人 参考链接 自定义机器人使用指南 创建自定义机器人 邀请自定义机器人进群。 进入目标群组&#xff0c;在群组右上角点击更多按钮&#xff0c;并点击 设置。 在右侧 设置 界面&#xff0c;点击 群机器人。 在 群机器人 界面点击 添加机器人。 在 添…

数据结构_双向循环链表实战

双向循环链表实战 package XHLB;public class SXXHLB {// 定义双向链表节点static class DoubleListNode { //Node(节点)private int val;private DoubleListNode prev;private DoubleListNode next;public DoubleListNode(int val) {this.val val;this.next null;this.prev …