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

米卓网站建设调查问卷网站建设方案

米卓网站建设,调查问卷网站建设方案,溧阳城乡建设厅网站,河南的网站建设公司文章目录 1. Vue 组件的基础概念1.1 什么是组件?1.2 组件的作用1.3 组件的分类(全局组件 vs 局部组件) 2. 创建和注册组件2.1 单文件组件(SFC)2.2 全局组件注册2.3 局部组件注册 3. 组件命名格式4. ref获取DOM元素4.1 …

文章目录

  • 1. Vue 组件的基础概念
    • 1.1 什么是组件?
    • 1.2 组件的作用
    • 1.3 组件的分类(全局组件 vs 局部组件)
  • 2. 创建和注册组件
    • 2.1 单文件组件(SFC)
    • 2.2 全局组件注册
    • 2.3 局部组件注册
  • 3. 组件命名格式
  • 4. ref获取DOM元素
    • 4.1 基本流程
    • 4.2 获取组件引用
  • 5. `ref`​ 操作组件 - `defineExpose`​
    • 5.1 `defineExpose`​ 的作用
    • 5.2 使用 `defineExpose`​ 暴露组件内部属性和方法
  • 5. 总结

在这里插入图片描述

1. Vue 组件的基础概念

下载 (14)

1.1 什么是组件?

组件是 Vue.js 中用于构建用户界面的独立、可复用的模块。组件允许开发者将应用程序的界面划分为多个独立的部分,每个部分对应一个功能或视图。这些部分可以独立开发、测试和维护,然后通过组合的方式构建复杂的界面。

组件的本质是一个带有 template​、script​ 和 style​ 的自包含模块:

  • template​:定义了组件的结构和内容。
  • script​:包含组件的逻辑,如数据、方法和生命周期钩子。
  • style​:定义了组件的样式,可以使用 Scoped CSS 来确保样式仅作用于当前组件。

1.2 组件的作用

  • 模块化:组件将大规模的应用程序分解为小型、独立、可复用的模块,便于管理和维护。
  • 复用性:组件可以在不同的地方重复使用,避免代码冗余,提高开发效率。
  • 可维护性:组件的独立性使得它们更容易调试和更新,而不必担心影响到其他部分。

1.3 组件的分类(全局组件 vs 局部组件)

根据组件的注册方式,Vue 组件可以分为全局组件和局部组件。

全局组件:一旦注册为全局组件,可以在任何地方使用,而无需再次引入和注册。

示例:

import MyComponent from './MyComponent.vue';
app.component('MyComponent', MyComponent);

局部组件:仅在注册了该组件的父组件或页面中可用,通常用于更加局部化的功能需求。

示例:

<script setup>
import MyComponent from './MyComponent.vue';
</script><template><MyComponent />
</template>

2. 创建和注册组件

2.1 单文件组件(SFC)

Vue 的单文件组件(SFC, Single File Component)是最常见的组件格式,将组件的模板、逻辑和样式整合在一个 .vue​ 文件中。SFC 提供了清晰的结构和高效的开发体验。

SFC 的基本结构:

<template><div><p>{{ message }}</p></div>
</template><script setup>
import { ref } from 'vue';const message = ref('Hello, Vue!');
</script><style scoped>
p {color: blue;
}
</style>
  • <template> ​:定义组件的模板部分,描述了组件的结构和布局。
  • <script setup> ​:包含组件的逻辑部分,使用 Vue 的组合式 API 进行数据和方法的管理。
  • <style> ​:定义组件的样式,使用 scoped​ 属性确保样式仅作用于当前组件。

2.2 全局组件注册

全局组件可以在 Vue 应用中的任何地方使用。通常在应用的入口文件(如 main.js​ 或 main.ts​)中注册。

步骤

  1. 创建一个全局组件:
<!-- GlobalComponent.vue -->
<template><div><h3>这是一个全局组件</h3></div>
</template><script setup>
</script><style scoped>
h3 {color: red;
}
</style>
  1. 在应用入口文件中注册全局组件:
import { createApp } from 'vue';
import App from './App.vue';
import GlobalComponent from './components/GlobalComponent.vue';const app = createApp(App);// 注册全局组件
app.component('GlobalComponent', GlobalComponent);app.mount('#app');
  1. 在任何地方使用全局组件:
<!-- APP.vue -->
<template><div><h1>这是父组件</h1><GlobalComponent></GlobalComponent></div>
</template><script setup>
</script><style scoped></style>

效果:

image

2.3 局部组件注册

局部组件注册意味着组件只能在注册它的父组件或页面中使用。局部组件注册通常在使用组合式 API 时通过 <script setup>​ 标签完成。

示例:

  1. 创建一个局部组件:
<!-- LocalComponent.vue -->
<template><div><h3>这是一个局部组件</h3></div>
</template><script setup>
</script><style scoped>
h3 {color: green;
}
</style>
  1. 在父组件中注册和使用局部组件:
<!-- APP.vue -->
<template><div><h1>这是父组件</h1><LocalComponent></LocalComponent></div>
</template><script setup>
// 注册局部组件
import LocalComponent from './components/LocalComponent.vue';
</script>

效果:

image

3. 组件命名格式

引用来源: Vue3——组件名格式

在整个指引中,我们都使用 PascalCase 作为组件名的注册格式,这是因为:

  1. PascalCase 是合法的 JavaScript 标识符。这使得在 JavaScript 中导入和注册组件都很容易,同时 IDE 也能提供较好的自动补全。
  2. <PascalCase />​ 在模板中更明显地表明了这是一个 Vue 组件,而不是原生 HTML 元素。同时也能够将 Vue 组件和自定义元素 (web components) 区分开来。

为了方便,Vue 支持将模板中使用 kebab-case 的标签解析为使用 PascalCase 注册的组件。这意味着一个以 MyComponent​ 为名注册的组件,在模板中可以通过 <MyComponent>​ 或 <my-component>​ 引用。这让我们能够使用同样的 JavaScript 组件注册代码来配合不同来源的模板。

比如之前的全局组件的使用就可以这样写:

<!-- APP.vue -->
<template><div><h1>这是父组件</h1><!-- <GlobalComponent></GlobalComponent> --><global-component></global-component></div>
</template><script setup>
</script><style scoped></style>

4. ref获取DOM元素

在 Vue 3 中,使用 ref​ 可以将 DOM 元素引用存储到一个响应式变量中。与响应式数据不同,ref​ 在这里并不创建响应式数据,而是获取元素的引用,方便后续在逻辑中直接访问该元素。

4.1 基本流程

  1. 创建 ​一个 ref​变量 来存放该元素的引用。
  2. 在模板中声明 ref​ 属性。
  3. 操作 DOM 元素。
<template><!-- 2. 在模板中声明刚才 ref 属性,注意要与刚才定义的 ref 变量名称相同 --><div ref="myDiv">这是一个需要获取的 div 元素</div><button @click="change">改变样式</button>
</template><script setup>
import { ref, onMounted } from 'vue';
// 1. 创建一个 ref 变量来存储 div 元素引用
const myDiv = ref(null);function change() {// 3. 使用 ref 变量来获取 div 元素,操作 DOM// 设置背景色myDiv.value.style.backgroundColor = 'lightblue';// 设置文本myDiv.value.innerHTML = 'Hello, Vue 3!';}
</script>

效果:

recording

4.2 获取组件引用

同样的,组件也可以通过这种方式获取引用:

<script setup>
import { ref, onMounted } from 'vue'
import Child from './Child.vue'const child = ref(null)onMounted(() => {// child.value 是 <Child /> 组件的实例
})
</script><template><Child ref="child" />
</template>

5. ref​ 操作组件 - defineExpose

如果想要在父组件中访问子组件的某些特定属性或方法,单靠 ref​ 是不够的。这时候,我们需要使用 defineExpose​ 来显式暴露子组件的属性或方法。

5.1 defineExpose​ 的作用

defineExpose​ 是 Vue 3 提供的一个新的组合式 API 工具,用于显式暴露组件内部的属性或方法。在默认情况下,组合式 API 中的状态或方法不会自动暴露给父组件,而使用 defineExpose​ 可以选择性地暴露这些内部内容,使其可以被父组件访问。

5.2 使用 defineExpose​ 暴露组件内部属性和方法

示例:

<!-- ChildComponent.vue -->
<template><div><p>子组件内容</p></div>
</template><script setup>
import { ref } from 'vue';// 1. 定义内部属性和方法
const internalState = ref('这是子组件的状态');
function internalMethod() {console.log('子组件方法被调用');
}// 2. 使用 defineExpose 暴露属性和方法
defineExpose({internalState,internalMethod,
});
</script>
<!-- ParentComponent.vue -->
<template><div><ChildComponent ref="childRef" /><button @click="useChildMethod">调用子组件方法</button><p>子组件状态: {{ childState }}</p></div>
</template><script setup>
import { ref, watch } from 'vue';
import ChildComponent from './ChildComponent.vue';const childRef = ref(null);
const childState = ref(null);
// 3. 调用子组件方法
function useChildMethod() {if (childRef.value) {childRef.value.internalMethod();}
}
// 监听子组件状态的变化
watch(childRef, (newVal) => {if (newVal) {childState.value = newVal.internalState;}
});
</script>

代码解释:

  • 在子组件中

    • internalState​ 是子组件的内部状态,internalMethod​ 是子组件的方法。
    • 使用 defineExpose​ 将 internalState​ 和 internalMethod​ 显式暴露给父组件。
  • 在父组件中

    • 通过 ref​ 获取子组件实例 childRef​,然后通过 childRef.value.internalMethod()​ 调用子组件的方法。
    • 使用 watch​ 监听 childRef​ 的变化,并通过 newVal.internalState​ 访问子组件的暴露状态。

image-20240815200313687

5. 总结

通过本文,我们简单讲解了Vue中组件的基本概念、作用以及最基本的使用,除此之外还讲解了如何获取DOM元素的引用和暴露子组件数据和方法,然而组件还有更多进阶知识,比如如何绑定子组件监听事件、组件通信等等知识,后面的知识我们在之后的博客进行讲解,希望对大家有所帮助☺️。


参考文章:

Vue3文档

在这里插入图片描述

http://www.sczhlp.com/news/108977/

相关文章:

  • 【SPIE独立出版|连续多年EI稳定检索】第七届地球科学与遥感测绘国际学术会议(GRSM 2025)
  • 郴州市宜章网站建设网站建设有哪几种
  • 广东的一起(17)做网站wordpress 安装错误
  • 阿甘网站建设小广告治理
  • 织梦网站图片怎么修改不了wordpress开发复杂网站
  • 云海建设工程有限公司网站长春网站建设方案详细
  • 做的网站怎么上传cn域名后缀网站
  • 大型网站许多网站网站开发会遇到哪些问题
  • 怎么做刷东西的网站网站建立方案
  • LDPC 码 BP 算法性能研究
  • 怎么建设一个响应式网站wordpress 上传类型
  • 公司网站怎么做用网站建设费用
  • 网站效果图尺寸网站模板安装教程
  • 石景山网站建设制作公司建设一个网站首先需要什么问题
  • 一个企业的网站建设做dw网站图片怎么下载地址
  • 群晖做网站服务器泉州建站哪些公司
  • 设计素材网站免费大全最新大兴模版网站建设公司
  • 百度云服务器做asp网站机械加工网上怎么接单
  • 中小型网站建设策划微商分销系统软件开发
  • 哪个网站做ppt能赚钱广告制作平台有哪些
  • 营销型企业网站群策略莱芜金点子电话
  • 江西建设厅网站官网wordpress如何让cnzz图标居左
  • 做网站加班多吗排名前十网站建设
  • 机票售票网站开发新零售商城
  • Python psutil模块
  • 跨网文件传输工具选择要点是什么?
  • 下半年业绩冲刺,12个效率工具帮你提速!
  • 南京网页网站制作企业品牌网站建设报价
  • AUTOSAR的MPU内存保护
  • AI赋能CRM:纷享销客智能图像提升终端运营效率