VueJS 基础之组件

news2024/11/18 6:38:43

文章目录

  • 参考
  • 描述
  • 组件化开发
      • 组成
      • template
      • script
      • style
      • main.js
  • 使用
      • 嵌套关系
      • 组件的使用
          • Left
          • Right
          • 举个栗子
  • 全局组件及私有组件
      • 私有组件
      • 全局组件
          • 举个栗子
            • main.js
            • App.vue

参考

项目描述
VueJS官方文档
搜索引擎Bing
哔哩哔哩黑马程序员

描述

项目描述
Edge109.0.1518.70 (正式版本) (64 位)
操作系统Windows 10 专业版
@vue/cli5.0.8
npm8.19.3
VueJS2.6.14

注:

推荐使用 Vue CLI 初始化 Vue 项目,如果你不清楚如何使用 Vue CLI ,欢迎移步至我的另一篇博客 Vue CLI(Vue.js 开发的标准工具)

组件化开发

组件化的目的,是为了让页面中的各个部分可以被复用,以减少重复的代码。另一方面,也可以更好地使团队分工协作,让不同的人负责编写不同的组件。
前端页面可以借助某种框架(如Vue.js、Angular、React)来实现组件化开发,使代码更容易复用。此时,一个网页不再是由一个个独立的HTML、CSS和JavaScript文件组成的了,而是按照组件的思想将网页划分成一个个组件,如轮播图组件、列表组件、导航栏组件等。将这些组件拼装在一起,就形成一个完整的网页了。


上述内容引用自 网络

使用 Vue.js 框架编写的单文件组件,以 vue 作为文件扩展名。

组成

每一个 Vue 组件都由三部分组成,即模板、样式及行为。打开 Vue 中的一个组件,你很有可能看到如下结构:

<template>
模板
</template>

<script>
行为
</script>

<style>
样式
</style>

注:

每一个组件中都必须要包含 template 标签,即需要有模板代码,这是一个组件的基础部分。

template

请将根组件 App.vue 文件中的默认内容清空并填充如下内容:

<template>
<div id="app">
  <p class="text">RedHeart</p>
</div>  
</template>

执行效果:

执行效果

注:

  1. template 元素是 VueJS 提供的容器标签。
  2. template 元素内仅能存在一个根节点。

script

<template>
<div id="app">
  <!-- 使用内容渲染指令指定显示内容 -->
  <p class="text" v-text="username"></p>
  <!-- 为按钮添加点击事件 -->
  <button class="replace" @click="replace()">修改用户名</button>
</div>  
</template>

<script>
// 在 Vue 组件中,你需要使用 export Default{}
// 来封装 JavaScript 业务逻辑。
export default {
  // 在 Vue 组件中,你需要使用 data() 函数
  // 来返回数据对象。
  data(){
    return {
      // 定义数据
      username: 'RedHeart'
    }
  },
  // 定义事件调用函数
  methods: {
    replace(){
      this.username = 'TwoMoons'
    }
  }
}
</script>

效果:

效果

注:

如果你像这样定义一个数据:

data: {
	username: 'RedHeart'
}

那么这个数据将影响到当前组件的其他实例。具体可以前往 VueJS 官方文档 中查看。

style

<template>
<div id="app">
  <!-- 使用内容渲染指令指定显示内容 -->
  <p class="text" v-text="username"></p>
  <!-- 为按钮添加点击事件 -->
  <button class="replace" @click="replace()">修改用户名</button>
</div>  
</template>

<script>
// 在 Vue 组件中,你需要使用 export Default{}
// 来封装 JavaScript 业务逻辑。
export default {
  // 在 Vue 组件中,你需要使用 data() 函数
  // 来返回数据对象。
  data(){
    return {
      // 定义数据
      username: 'RedHeart'
    }
  },
  // 定义事件调用函数
  methods: {
    replace(){
      this.username = 'TwoMoons'
    }
  }
}
</script>

<style>
.replace{
  color: dodgerblue;
}
</style>

效果:

效果

注:

如果你在 style 元素中添加 lang=“less” 属性,那么你可以使用 Less 语法编写组件的样式。

main.js

位于 Vue 项目文件中的 src 文件见下的 main.js 用于将组件渲染到位于 public 文件夹中的 index.html 中。

在默认情况下(刚使用 Vue CLI 创建 Vue 项目后),main.js 长这样:

import Vue from 'vue'
import App from './App.vue'

Vue.config.productionTip = false

new Vue({
  render: h => h(App),
}).$mount('#app')

其中:

  1. import 语句用于导入 VueJS 及需要使用到的相关组件。
  2. render 属性用于指定需要渲染的组件。
  3. 使用 $mount() 来指定渲染区域。

使用

嵌套关系

多个组件在封装后但没有使用前这段时间中,组件之间并没有任何关系。组件之间产生关系发生在组件的使用过程中。根据组件之间不同的嵌套关系,我们可以得到两种组件间的关系,即父子关系与兄弟关系。

  1. 父子关系
    一个组件内部嵌套着另外的组件,那么它们之间存在父子关系。
  2. 兄弟关系
    一个组件内部嵌套着另外的组件,这些被嵌套的组件之间存在兄弟关系。

组件的使用

在创建一个 Vue 项目及若干组件后,若你需要使用这些组件,那么你需要进行如下几个步骤:

  1. 导入组件。
  2. export default{} 中的节点 components 下注册组件。
  3. 在导入组件的父级组件中以标签的形式来使用组件。
Left

这是接下来将要使用到的子组件 Left,你可以将该内容保存到 Vue 项目中的 components 文件夹中。

<template>
  <div class="left-container">
    <h3>Left 组件</h3>
    <hr />

    <MyCount :init="9"></MyCount>
  </div>
</template>

<script>
export default {}
</script>

<style lang="less" scoped>
.left-container {
  padding: 0 20px 20px;
  background-color: orange;
  min-height: 250px;
  flex: 1;
}

h3 {
  color: red;
}

// h5[data-v-3c83f0b7]
// [data-v-3c83f0b7] h5

// 当使用第三方组件库的时候,如果有修改第三方组件默认样式的需求,需要用到 /deep/
/deep/ h5 {
  color: pink;
}
</style>
Right

这是接下来将要使用到的子组件 Right,你可以将该内容保存到 Vue 项目中的 components 文件夹中。

<template>
  <div class="right-container">
    <h3>Right 组件</h3>
    <hr />

    <MyCount :init="6"></MyCount>
  </div>
</template>

<script>
export default {}
</script>

<style lang="less">
.right-container {
  padding: 0 20px 20px;
  background-color: lightskyblue;
  min-height: 250px;
  flex: 1;
}
</style>
举个栗子
<template>
  <div class="app-container">
    <h1>App 根组件</h1>
     <hr />
    <div class="box">
      <!-- 以标签形式指定需要使用到的组件 -->
      <Left></Left>
      <Right></Right>
    </div>
  </div>
</template>

<script>
// 导入组件
import Left from '@/components/Left.vue';
import Right from '@/components/Right.vue';

export default {
  // 注册组件
  components: {
    Left,
    Right
  }
}
</script>

// 使用 CSS 预处理器 Less 对组件的样式进行设置
<style lang="less">
.app-container {
  padding: 1px 20px 20px;
  background-color: #efefef;
}
.box {
  display: flex;
}
</style>

执行效果:

效果

注:

  1. 在 JavaScript 中,对象的属性名与属性值如果相同,则可以使用属性名来代表属性名及属性值。因此,
components: {
    Left,
    Right
  }

的完整写法为:

components: {
	Left: Left,
	Right: Right
	}

其中,属性名代表注册组件后,使用该组件需要使用的名称。属性代表需要被组成的组件的名称。

  1. 如果你使用 Vue CLI 构建 Vue 项目,那么你可以在路径中使用 @ 代表当前项目文件中的 src 文件夹。

全局组件及私有组件

私有组件

使用 export default{} 下的 components 节点注册的组件为私有组件。私有组件仅能在注册该组件的父级组件中使用。

全局组件

被注册的全局组件可以被任意组件所使用。使用 Vue.component() 函数,你可以将某个组件组成为全局组件。

Vue.component('使用该组件时需要使用的名称', 被注册组件的名称);
举个栗子
main.js
import Vue from 'vue'
import App from './App.vue'

Vue.config.productionTip = false

// 导入 Left 组件及 Right 组件
import Left from '@/components/Left.vue';
import Right from '@/components/Right.vue';


// 将这两个组件注册为全局组件
Vue.component('GlobalLeft', Left);
Vue.component('GlobalRight', Right);

new Vue({
  render: h => h(App),
}).$mount('#app')
App.vue
<template>
  <div class="app-container">
    <h1>App 根组件</h1>
     <hr />
    <div class="box">
      <!-- 使用全局组件 -->
      <GlobalLeft></GlobalLeft>
      <GlobalRight></GlobalRight>
    </div>
  </div>
</template>

<script>
export default {
// 并未在此处注册任何组件
}
</script>

// 使用 CSS 预处理器 Less 对组件的样式进行设置
<style lang="less">
.app-container {
  padding: 1px 20px 20px;
  background-color: #efefef;
}
.box {
  display: flex;
}
</style>

效果:

效果

可以看到,我们并没有在 App.vue 中注册组件。但可以直接使用已经被注册的全局组件。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/192055.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

计算机网路6-详述网路层:数据交换、路由算法和协议、网络协议

一、网络层基本概念 1、主要任务 把分组从源端传到目的端&#xff0c;为分组交换网上的不同主机提供通信服务 2、网络层传输单位--数据报 数据报与分组之间关系&#xff1a; 分组是数据报通过切割划分出来的一个片段&#xff0c;多个分组组成数据报 3、网络层的几大功能 路…

LeetCode-122. 买卖股票的最佳时机 II

目录暴力递归动态规划贪心题目来源 122. 买卖股票的最佳时机 II 暴力递归 根据题意&#xff1a;由于不限制交易次数&#xff0c;在每一天&#xff0c;就可以根据当前是否持有股票选择相应的操作。「暴力搜索」在树形问题里也叫「回溯搜索」、「回溯法」。 首先画出树形图&…

如何实现报表集成?(二)——用户同步和单点登录

在上一篇&#xff0c;我们对报表集成进行了一个整体的介绍&#xff0c;从报表集成的背景、痛点、需求、集成架构等几个方面进行了阐述。 这一篇&#xff0c;我们来聊一下用户同步和单点登录。行文过程中得到了来自报表软件厂商 Smartbi 的报表产品&#xff1a;电子表格软件的协…

c++11 标准模板(STL)(std::multiset)(三)

定义于头文件 <set> template< class Key, class Compare std::less<Key>, class Allocator std::allocator<Key> > class multiset;(1)namespace pmr { template <class Key, class Compare std::less<Key>> usi…

怎么给视频配音好听?这些好方法快学起来

应该不少小伙伴每天都会刷各种短视频&#xff0c;有些视频很搞笑&#xff0c;有些却很无趣&#xff0c;让人想直接的划走。很多制作短视频的小伙伴应该都知道&#xff0c;很多视频都需要配音来衬托&#xff0c;吸引别人的眼球。当你想给自己的视频配上好听的声音&#xff0c;但…

QT/C++——网络编程

目录 一、基础知识复习 二、UDP 客户端&#xff1a; 服务器&#xff1a; 三、TCP 服务器&#xff1a; 客户端&#xff1a; 四、小项目 客户端&#xff1a; 服务器&#xff1a; 一、基础知识复习 这部分内容前面讲的比较详细&#xff0c;现在就是简单复习一下。 两台主…

OAuth2授权机制介绍指南

目录 一、什么是OAuth2&#xff1f; 二、OAuth2中有哪些角色&#xff1f; 三、OAuth2的授权流程&#xff1f; 四、OAuth2令牌的特点&#xff1f; 五、OAuth2有哪些授权方式&#xff1f; 5.1 授权码 5.2 隐藏方式 5.3 密码方式 5.4 凭证方式 一、什么是OAuth2&#xff1f; …

PowerCLi 批量多esxi主机创建登陆用户

官网PowerCLI参数配置参考 New-VMHostAccount 创建用户参考New-VIRole 创建权限组参考Get-VIPrivilege 查询所有角色层配置信息参考创建esxi登陆用户一键脚本,目前只能单

2023年软考报哪门比较好?

2023年软考报名还有一个月左右就会启动了&#xff0c;大家有想好报考哪门吗&#xff1f;不妨看看下文&#xff0c;让你的思路更加清晰。 软考科目汇总&#xff1a; (1)高级资格&#xff1a;网络规划设计师、系统规划与管理师、系统架构设计师、信息系统项目管理师、系统分析师…

磨金石教育技能干货分享|年味摄影作品选登:你的春节怎么过的

要问年味是什么&#xff1f;味&#xff0c;是一种感觉&#xff0c;年味就是&#xff1a;除夕夜里&#xff0c;红灯笼挂满街道&#xff0c;各种年货摆满长街。各种美食充满餐桌&#xff0c;亲人团聚&#xff0c;欢笑一堂。这种让人放松、快乐的感觉就是过年特有的味道。最近由长…

MySQL(一)

性能监控 使用show profile查询剖析工具&#xff0c;可以指定具体的type type all&#xff1a;显示所有性能信息 show profile all for query n block io&#xff1a;显示块io操作的次数 show profile block io for query n context switches&#xff1a;显示上下文切换次数&a…

【算法基础】整数二分查找法

&#x1f466;个人主页&#xff1a;Weraphael ✍&#x1f3fb;作者简介&#xff1a;目前是C语言学习者 ✈️专栏&#xff1a;【C/C】算法 &#x1f40b; 希望大家多多支持&#xff0c;咱一起进步&#xff01;&#x1f601; 如果文章对你有帮助的话 欢迎 评论&#x1f4ac; 点赞…

[golang Web开发] 1.golang web开发简介以及web服务器的搭建以及http协议简介

一.web开发简介 1.简介 Web应用在我们的生活中无处不在,看看我们日常使用的各个应用程序,它们要么是 Web应用&#xff0c;要么是移动 App 这类 web应用的变种,无论哪一种编程语言&#xff0c;只要它能够开发出与人类交互的软件&#xff0c;它就必然会支持 Web应用开发,对一门崭…

高精度压缩Transformer,NNI剪枝一站式指南

无论在学术界还是产业界&#xff0c;今年人工智能大模型都是爆款话题。但面对这些动不动就数十亿级别参数的模型&#xff0c;使用传统方法微调&#xff0c;宛如水中捞月、海底捞针。作为微软亚洲研究院为科研人员和算法工程师量身定制的一站式 AutoML&#xff08;自动机器学习&…

Vertical-align属性值区分

先简单看一下官方文档上的Vertical-align这些属性值的描述&#xff0c;虽然只有简单的描述&#xff0c;但其实描述的很清楚&#xff0c;但有时只看文字并不能很好的理解其含义。 下面结合代码图说明&#xff1a; 首先&#xff0c;我建造了一个背景颜色为绿色的div盒子&#xf…

9、app稳定性测试之monkey工具使用

简介 方法:利用Monkey工具,选择某些场景做持续反复操作,以衡量系统的稳定性 工具: monkey 友盟埋点 日志分析工具 系统监控工具GT 场景: * 随机测试 可以用monkey模拟 * 多个运行中app切换测试&#xff1b; * 各种事件打扰&#xff0c;如插拔数据线、电话打扰、收…

软件测试之冒烟测试须知

冒烟测试的介入时间? 开发编码完成&#xff0c;自测通过以后为最佳介入时间。 如果开发无自测直接提交&#xff0c;一般冒烟测试通过率会很低【除非你遇到的是大内高手】 什么需求需要做冒烟测试? 理论上&#xff0c;所有的需求均可以做冒烟测试。 冒烟测试需要做几轮? 一轮…

分享会上狂吹MySQL的4大索引结构,没想到大家的鉴赏能力如此的~~~~

索引&#xff08;index&#xff09;是帮助MySQL高效获取数据的数据结构(有序)。在数据之外&#xff0c;数据库系统还维护着满足 特定查找算法的数据结构&#xff0c;这些数据结构以某种方式引用&#xff08;指向&#xff09;数据&#xff0c; 这样就可以在这些数据结构 上实现高…

企业需要做哪些准备,来落地商业智能 BI 系统

随着新一代信息化、数字化技术的应用&#xff0c;引发了新一轮的科技革命&#xff0c;现代化社会和数字化的联系越来越紧密&#xff0c;数据也变成继土地、劳动力、资本、技术之后的第五大生产要素&#xff0c;这一切都表明世界已经找准未来方向&#xff0c;前沿科技也与落地并…

中国电子学会2022年09月份青少年软件编程Scratch图形化等级考试试卷四级真题(含答案)

2022-09 Scratch四级真题 分数&#xff1a;100 题数&#xff1a;29 测试时长&#xff1a;60min 一、单选题(共15题&#xff0c;共30分) 1.运行下列程序&#xff0c;说法正确的是&#xff1f;&#xff08;D&#xff09; A.列表中的数字全部小于11 B.列表的长度为10 C.变量…