《Vue2 框架第二课:组件结构与模板语法详解》

【vuejs】vue2项目中封装组件的分析以及常用方式和属性讲解 定义组件模板是封装过程的第一步。在Vue2中,模板是组件的声明式部分,它描述了组件的UI结构。模板可以包含HTML标签、组件自定义标签以及Vue指令。基本结构:每个组件模板都应遵循基本的HTML结构,包括标签包裹的组件内容。组件复用:在模板中使用标签来复用已有的Vue组件或HTML元素。动态组件:利用可以实现组件的动态切换。条件渲染:使用v-ifv-else-ifv-else和v-show实现条件渲染,使组件能够根据不同条件显示不同内容。列表渲染:使用v-for。 阅读详情

写在开头:Vue.js 是一个流行的前端框架,广泛应用于构建用户界面和单页应用(SPA)。然而,需要注意的是,Vue2 已经于 2023 年底 正式停止维护。这意味着官方团队将不再为 Vue2 提供功能更新和安全补丁。

尽管如此,Vue2 在业界仍然具有广泛的影响力和使用场景。许多现有的项目仍然基于 Vue2 构建,学习 Vue2 不仅能够帮助我们理解和维护这些遗留项目,还能为我们后续学习 Vue3 打下坚实的基础。Vue3 虽然引入了许多新特性和性能优化,但其核心理念与 Vue2 一脉相承。因此,掌握 Vue2 的基础知识对于顺利过渡到 Vue3 至关重要。

一、引言:为什么组件化开发是Vue的核心?

在Vue.js中,组件化开发是构建大型应用的核心思想。通过组件,我们可以将一个复杂的页面拆分成独立、可复用的模块。例如,一个电商网站的页面可以拆分为商品卡片组件、购物车组件、搜索栏组件等,每个组件负责特定的功能。这种开发模式不仅提高了代码复用率,还让协作开发和后期维护更加高效。

如果你还没有阅读我的第一课时内容,建议先回顾 《Vue2 框架入门第一课:基础概念与环境搭建》。接下来,让我们正式进入 Vue2 组件的世界!

本课时将深入讲解Vue2组件的结构和模板语法,并通过完整示例帮助你彻底掌握这些核心概念。


二、Vue2组件结构详解

(一)组件的三大核心部分

1. template:组件的骨架
  • 作用:定义HTML结构,支持Vue的模板语法(如插值、指令)。
  • 限制:必须有且仅有一个根元素(如外层<div>包裹)。
  • 原理:Vue会将模板编译为虚拟DOM,实现高效的DOM更新。
  • 示例:
 <template>
   <div class="container">
     <h1>{{ title }}</h1>
   </div>
 </template>
2. script:组件的逻辑
  • 数据驱动:通过data()函数返回响应式数据(必须是函数,避免组件复用时的数据污染)。
  • 方法定义:在methods中定义事件处理函数。
  • 生命周期钩子:如created()、mounted(),用于在特定阶段执行逻辑。
  • 示例:
<script>
export default {
  data() {
    return { title: "Hello Vue2!" };
  },
  methods: {
    updateTitle() {
      this.title = "数据已更新!";
    }
  },
  mounted() {
    console.log("组件已挂载!");
  }
};
</script>
3. style:组件的样式
  • 作用域控制:使用scoped属性让样式仅作用于当前组件(原理是为元素添加data-v-xxx属性选择器)。
  • 预处理器支持:可搭配<style lang="scss">使用Sass/Less。
  • 示例:
<style scoped>
.container {
  padding: 20px;
  background: #f0f0f0;
}
</style>

(二)组件注册的两种方式

1. 全局注册
  • 适用场景:高频复用的基础组件(如按钮、输入框)。
  • 注册方法:
// main.js
import MyButton from './components/MyButton.vue';
Vue.component('MyButton', MyButton);
  • 缺点:全局注册的组件会增大初始包体积。
2. 局部注册
  • 适用场景:仅在特定父组件中使用的组件。
  • 注册方法:
// ParentComponent.vue
import ChildComponent from './ChildComponent.vue';
export default {
  components: { ChildComponent }
};

三、Vue2模板语法深度解析

(一)插值表达式:{{ }}的奥秘

  • 基础用法:<p>{{ message }}</p>
  • 表达式支持:可写简单表达式,如{{ count + 1 }}
  • 安全限制:自动转义HTML内容,防止XSS攻击。如需原始HTML,需使用v-html指令。

(二)指令:Vue模板的灵魂

1. 数据绑定
  • v-bind:动态绑定属性,可简写为:
<img :src="imageUrl" :alt="imgAlt">
2. 事件监听
  • v-on:监听DOM事件,可简写为@
<button @click="handleClick">点击</button>
3. 条件渲染
  • v-if vs v-show:
  • v-if:直接销毁/创建元素,适合切换频率低的场景。
  • v-show:通过CSS的display控制显示,适合频繁切换。
4. 列表渲染
  • v-for必须搭配:key:
<li v-for="item in items" :key="item.id">{{ item.name }}</li>

为什么需要key? 帮助Vue高效更新虚拟DOM,避免元素错位

四、实战示例:一个完整的待办事项组件

<template>
  <div class="todo-list">
    <input 
      v-model="newTodo" 
      @keyup.enter="addTodo"
      placeholder="输入任务后按回车"
    >
    <ul>
      <li v-for="todo in todos" :key="todo.id">
        {{ todo.text }}
        <button @click="removeTodo(todo.id)">×</button>
      </li>
    </ul>
    <p v-if="todos.length === 0">暂无任务,快去添加吧!</p>
  </div>
</template>

<script>
export default {
  data() {
    return {
      newTodo: '',
      todos: [
        { id: 1, text: '学习Vue2组件' },
        { id: 2, text: '写一篇技术博客' }
      ]
    };
  },
  methods: {
    addTodo() {
      if (this.newTodo.trim()) {
        this.todos.push({
          id: Date.now(),
          text: this.newTodo
        });
        this.newTodo = '';
      }
    },
    removeTodo(id) {
      this.todos = this.todos.filter(todo => todo.id !== id);
    }
  }
};
</script>

<style scoped>
.todo-list {
  max-width: 400px;
  margin: 20px auto;
}
li {
  display: flex;
  justify-content: space-between;
  padding: 8px;
  border-bottom: 1px solid #eee;
}
</style>
功能解析:
  1. 使用v-model实现输入框双向绑定
  2. @keyup.enter监听回车事件
  3. v-for渲染列表,:key绑定唯一ID
  4. v-if控制空状态提示

五、避坑指南:常见问题与解决方案

1. 为什么data必须是函数?

避免多个组件实例共享同一数据对象,导致状态污染。

2. v-for和v-if同时使用时的优先级问题

v-for优先级更高,建议先用计算属性过滤数据。

3. 样式冲突问题

使用scoped属性或CSS Modules隔离样式。

六、总结

通过本文的学习,你已掌握:

  • ✅ 组件的三大核心结构
  • ✅ 模板语法中的关键指令
  • ✅ 组件注册的最佳实践
  • ✅ 实际开发中的常见避坑技巧

在后续课程中,我们将结合Vuex状态管理和Vue Router路由,打造更复杂的应用。建议读者动手实现示例代码,并尝试扩展功能(如添加任务完成状态)。

写在最后
哈喽!大家好呀,我是 Code_Cracke,一名热爱编程的小伙伴。在这里,我将分享一些实用的开发技巧和经验心得。如果你也对编程充满热情,欢迎关注并一起交流学习!

如果你对这篇文章有任何疑问、建议或者独特的见解,欢迎在评论区留言。无论是探讨技术细节,还是分享项目经验,都能让我们共同进步。

【零基础入门VUE】VueJS - 概述 不会对 DOM 进行更改,而是创建 DOM 的副本,该副本以 JavaScript 数据结构的形式存在。最终的更改会更新到真实的 DOM,用户将看到它的变化。随后,对两个 JavaScript 对象进行比较,并在真实 DOM 中更新最终的更改。Ember 添加了 glimmer 渲染引擎,旨在提高重新渲染性能,这与使用虚拟 DOM 的 VueJS 和 React 是类似的概念。随着时间的推移,淘汰赛的发展速度已经放缓。VueJS 继承了 Angular 和 React 的优点,并构建了一个强大的库。 阅读详情

相关推荐

【前端框架开发 | Vue.js | 第二篇】Vue.js目录结构及模板语法

Vue.js 的目录结构可以根据项目的规模和需求而有所不同,但通常遵循一种基本的约定和最佳实践。当 Vue 实例挂载到 #app 容器中时,Vue.js 会监听 message 数据属性的变化并将其更新到模板中。这意味着,如果 message 的值发生变化,对应的``元素也会随之更新以显示最新的值。v-bind 指令用于动态地将表达式的值绑定到 HTML 元素的属性上。它的主要作用是在模板中实现数据和属性的绑定。

等风来 1万+

vscode 最全vue2 模板

【代码】vscode 最全vue2 模板。

liyaodong1234的博客 1329

扩增子分析|溯源分析在R中的复现:跟着Nature系列文章利用FEAST溯源分析包追溯微生物群落的起源

溯源分析由Liat Shenhav等人在2019年发表在Nature Methods杂志,他们开创的一种分析微生物群落组成结构的方法,通过量化不同微生物样本(来源)在目标微生物群落(汇)中的比例或分数识别微生物群落的潜在来源。该方法自发表以来受到微生物学界广泛关注,该论文截止2024年10月9日已经被引289次,是领域内高被引论文,该方法已经成为Nature,cell系列文章高度关注的方法。

weixin_46814750的博客 3434

Vue2-模板语法

template三种写法,Vue.js模板语法,指令与修饰符

yulingpan123的博客 1384

无人机机场自动化巡检钢铁厂管廊技术方案

摘要:针对钢厂管廊人工巡检效率低、成本高等问题,提出5G+无人机自主巡检解决方案。该系统由智能机库、5G无人机、AI分析平台等组成,可实现自动起降、实时数据传输、缺陷智能识别等功能。无人机配备四合一云台相机,支持42分钟续航和复杂环境飞行,通过深度学习算法自动生成巡检报告。方案实施后可提升巡检效率3倍以上,降低人工成本和安全风险,实现全天候自动化巡检,为钢厂管廊安全管理提供智能化技术支持。(149字)

gxdhlg的专栏 1685

银河麒麟V10 SP3系统下如何安全安装gcc-toolset-10(附yum仓库避坑指南)

本文详细介绍了在银河麒麟V10 SP3系统中安全部署gcc-toolset-10的完整方案。核心在于通过配置默认禁用的yum仓库(如EPKL仓库)并配合--enablerepo参数进行精准安装,有效规避依赖冲突风险,实现与系统默认GCC 7.3的稳定共存。文章还提供了多版本环境切换、系统维护及故障排查的实用指南,确保操作的可控与可逆。

h0i1j2k3l的博客 589

vue2之浅谈template

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 vue2之浅谈template什么是template以定义组件的两种方法之一的*定义根组件*为例我们先看没有template的情况接下来我们引入template,看看有template的情况 什么是template template的作用是渲染组件的内容,在vue中渲染组件的内容有两种方式,这是其一,另外一种是通过render函数的方式。另外一种我们之后讲。 先来看看官方文档的定义: 组件的模板结构(HTML),模板内容会被vue进行.

m0_56062110的博客 2590

win10任务栏文件夹设置成竖形列表样式

win10任务栏文件夹设置成竖形列表样式

ftzchina的博客 7081

vue2模板解析

vue2模板解析

qq_42880714的博客 2096

DC-DC电源PCB布局实战:从EMI优化到热管理

本文深入探讨了DC-DC电源PCB布局的核心实战技巧。文章从分析电流环路入手,强调通过优化“黄金三角”布局以最小化环路面积,从而有效抑制EMI并提升效率。详细阐述了功率器件摆放、地线分割、敏感信号布线、电感下方铺铜策略以及热管理设计等关键步骤,为工程师提供了一套从理论到实践的完整布局指南。

z5a6b的博客 721

Java接入DeepSeek大模型:从零实现流式对话+多轮会话管理(完整项目实战)

emitter.completeWithError(new RuntimeException("连接DeepSeek服务超时"));private static final Set<String> BLACK_WORDS = Set.of("暴力", "色情", "政治敏感");emitter.onCompletion(() -> log.info("SSE连接完成"));emitter.onTimeout(() -> log.warn("SSE连接超时"));// 每个路由基础连接数。

wjianwei666的专栏 931

管理系统的前端模板(vue2+Element UI)

前言这是引用ElementUI官网的布局容器里面的代码拿来修改优化后的。用的框架是vue2一、模板展示图二、获取的方式及操作运行步骤(一)获取方式去公众号“(二)操作步骤。

快乐学习 2万+

【Python LeetCode 专题】面试经典 150 题

面试经典 150 题

一杯水果茶!足矣~ 1173

Vue基础——VueJS是什么、Vue的优缺点、vue2和vue3的模板区别、MVVM数据双向绑定、Vue的安装和使用、Vue模板语法-文本渲染、常用的vue的指令

Vue基础——VueJS是什么、Vue的优缺点、vue2和vue3的模板区别、MVVM数据双向绑定、Vue的安装和使用、Vue模板语法-文本渲染、常用的vue的指令

ranran0306的博客 9713

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Vue 3 组件基础与模板语法详解

1. Vue 3 的新特性Vue 3引入了许多新的特性,以提高框架的性能和可维护性。:这是Vue 3中最大的变化之一,它提供了一种更灵活的方式来组织和重用组件的逻辑。Teleport:这是一个新的API,允许我们在组件树中将元素“传送”到其他位置。Suspense:这是一个新的API,允许我们在组件树中等待异步数据加载。Fragment:这是一个新的内置组件,允许我们在组件中渲染多个根节点。v-memo:这是一个新的指令,允许我们在渲染过程中缓存组件的输出。更快的渲染速度。

https://blog.cmdragon.cn/ 1278

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

请简述Vue中模板语法和组件语法之间的区别

异步组件的加载过程是异步的,也就是说,当组件被加载时,Vue不会立即渲染该组件,而是将其添加到组件树中,并在适当的时候进行渲染。总之,异步组件主要适用于需要动态加载大型组件库或需要灵活切换组件的情况,而动态组件则更适用于需要根据条件选择不同的布局和样式的情况。为假时,段落元素会被忽略,但是已经渲染出来的元素不会立即被销毁,而是会被保留在DOM中,直到达到Vue的指令清理器的时间点。指令来动态绑定要渲染的组件的方式。通过使用动态组件,可以在不同的场景下使用不同的组件,从而实现更灵活的布局和样式。

WangYaolove1314的博客 1707

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

前端框架Vue(概述,特点,安装,helloWorld,模板语法,指令,组件)

这里写目录标题Vue什么是Vue.js?Vue.js优点Vue安装第一个Vue demo模板语法Vue指令Vue生命周期**Vue组件** Vue 什么是Vue.js? Vue(读音 /vjuː/,类似于 view())是一套用于构建用户界面的渐进式框架。与其他大型框架不同的是Vue被设计为可以自底向上逐层应用。Vue的核心库之关心视图层,不仅易于上手,还便于与第三方库或既有项目整合。 ​ Vue.js是前端的主流框架之一,和Angular.js,React.js,并成为前端三大主流框架 Vue.js优点

qq_53677566的博客 1万+

Vue 3 入门教程 2- Vue 组件基础与模板语法

Vue组件基础与模板语法摘要 Vue组件是构建用户界面的核心单元,包含模板、脚本和样式三部分。单文件组件(.vue)结构清晰,支持全局/局部注册。组件通信主要通过props实现父传子数据传递。 模板语法提供数据绑定(v-bind)、事件监听(v-on)、双向绑定(v-model)等功能。条件渲染(v-if/v-show)和列表渲染(v-for)支持动态内容展示,需注意v-for必须指定key属性。事件修饰符(.stop/.prevent等)可控制事件行为。这些特性使Vue能高效构建响应式应用。

苦逼前端分享苦逼经验 1178

vue中的模板语法

Vue.js,简称Vue,是一个用于构建用户界面的渐进式JavaScript框架。自从2014年首次发布以来,Vue因其简洁、易学和高效而迅速赢得了开发者的青睐。Vue的核心库只关注视图层,易于与其他库或现有项目整合,同时也可以支持通过各种插件和库构建复杂的单页应用(SPA)。Vue模板语法是一种声明式的标记语言,用于将组件的数据渲染进DOM。它允许开发者使用HTML作为模板,并通过Vue的指令来增强HTML的功能,实现数据和视图的动态绑定。Vue允许开发者创建自己的指令,以封装复杂的DOM操作逻辑。

无远弗届 1816

Vue 核心语法详解:模板语法中的绑定表达式与过滤器(附 Vue3 替代方案)

本文系统介绍了Vue模板语法中的绑定表达式与过滤器机制。首先阐述了模板语法在Vue中的核心地位,详细解析了插值语法{{}}和指令v-bind的工作原理。重点分析了绑定表达式的语法规则与限制条件,强调应避免将复杂逻辑和副作用写入表达式。文章深入探讨了Vue2过滤器的使用场景与局限性,并针对Vue3移除过滤器的变化,提出了四种替代方案:计算属性、方法、工具函数和自定义指令,通过具体案例演示了迁移方法。最后总结了最佳实践方案,建议根据实际场景选择合适的数据处理方式,以提升代码质量和维护性。

qq_40303030的博客 2052

2024轻松学会 Vue 框架:Vue 框架快速入门指南(一)

🤍 前端开发工程师、技术日更博主、已过CET6🍨、23年度博客之星前端领域TOP1🕠高级专题作者、打造专栏🍚签约作者、上架课程。

你若盛开,清风自来 3493

Vue 2 vs Vue 3:核心语法与 API 对比详解

应用实例化和全局 API 的实例化。Composition API 的引入和基于 Proxy 的新响应式系统。模板语法中的多根节点支持和统一的v-slot插槽语法。一些实例属性的移除或获取方式改变。部分生命周期钩子的名称调整。函数式组件定义的简化。这些变化虽然带来了学习和迁移的成本,但它们是 Vue 3 性能提升、可维护性增强和新特性实现的基础。Composition API 是其中最需要花时间去理解和掌握的部分,它提供了一种更灵活、更强大的方式来组织组件逻辑和复用代码。

v997282418的博客 1692
上一篇: 《Vue2 框架入门第一课:基础概念与环境搭建》
下一篇: Vue3 基础概念与环境搭建
Code_Cracke
博客等级 码龄5年 148粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Code_Cracke

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值