Vue的两大核心
1. 数据驱动 - 数据驱动界面显示
2. 模块化 - 复用公共模块,组件实现模块化提供基础
组件基础
组件渲染过程
template ---> ast(抽象语法树) ---> render ---> VDom(虚拟DOM) ---> 真实的Dom ---> 页面
Vue组件需要编译,编译过程可能发生在
- 打包过程 (使用vue文件编写)
- 运行时(将字符串赋值template字段,挂载到一个元素上并以其 DOM 内部的 HTML 作为模板)
对应的两种方式 runtime-only vs runtime-compiler
runtime-only(默认)
- 打包时只包含运行时,因此体积更少
- 将template在打包的时候,就已经编译为render函数,因此性能更好
runtime-compiler
- 打包时需要包含(运行时 + 编译器),因此体积更大,大概多10Kb
- 在运行的时候才把template编译为render函数,因此性能更差
启用runtime-compiler
vue.config.js(若没有手动创建一个)
module.exports = { runtimeCompiler: true //默认false }
组件定义
1. 字符串形式定义(不推荐)
例子
const CustomButton = { template: "<button>自定义按钮</button>" };
这种形式在运行时才把template编译成render函数,因此需要启用运行时编译(runtime-compiler)
2. 单文件组件(推荐)
创建.vue后缀的文件,定义如下
<template> <div> <button>自定义按钮</button> </div> </template>
<template> 里只能有一个根节点,即第一层只能有一个节点,不能多个节点平级
这种形式在打包的时就编译成render函数,因此跟推荐这种方式定义组件
组件注册
1. 全局注册
全局注册是通过Vue.component()注册
import CustomButton from './components/ComponentDemo.vue' Vue.component('CustomButton', CustomButton)
优点
- 其他地方可以直接使用
- 不再需要components指定组件
缺点
- 全局注册的组件会全部一起打包,增加app.js体积
适合
- 基础组件全局注册
2. 局部注册
在需要的地方导入
<template> <div id="app"> <customButton></customButton> </div> </template> <script> import CustomButton from "./components/ComponentDemo.vue"; export default { name: "App", components: { CustomButton } }; </script>
优点
- 按需加载
缺点
- 每次使用必须导入,然后components指定
适合
- 非基础组件
组件使用
组件复用
<template> <div id="app"> <img alt="Vue logo" src="/UploadFiles/2021-04-02/logo.png">customButton 组件
<template> <div id="app"> <button @click="increment">click me {{times}} times</button> </div> </template> <script> export default { data() { return { times: 0 }; }, methods: { increment() { return this.times++; } } }; </script>每个组件都会创建一个新实例,组件的data必须是function,因为每个实例维护自己的data数据
组件传参
1. 通过props属性
定义一个button,按钮文本通过props传入
<template> <button> {{buttonText}} </button> </template> <script> export default { props: { buttonText: String } }; </script>调用者通过attribute传入
<customButton buttonText="Button 1"></customButton> <customButton buttonText="Button 2"></customButton> <customButton buttonText="Button 3"></customButton>运行效果
2. 通过插槽<slot></slot>
组件在需要替换的地方放入插槽<slot></slot>
<template> <button style="margin:10px"><slot>Defalt Button</slot></button> </template> <script> export default { props: { buttonText: String } }; </script>调用者的innerHtml会替换插槽的值,若为空,使用默认的
运行效果
注意:看到是用自定义组件的innerHtml替换插槽,若插槽只有一个,可以不写name attribute,若多个插槽需指定插槽name attribute
自定义事件
1. 在组件内部调用this.$emit触发自定义事件
<template> <div style="margin:10px"> <button @click="increment"> <slot>Defalt Button</slot> </button> <span>Click me {{times}} times</span> </div> </template> <script> export default { props: { buttonText: String }, data() { return { times: 0 }; }, methods: { increment() { this.times++; ("increment"); } } }; </script>2. 调用者监听自定义事件
<template> <div id="app"> <customButton @increment="handleIncrement"></customButton> <customButton @increment="handleIncrement"> <span style="color:blue">Button 2</span> </customButton> <customButton @increment="handleIncrement">Button 3</customButton> <p>Total click {{totalClicks}} times</p> </div> </template> <script> import CustomButton from "./components/ComponentDemo.vue"; export default { name: "App", components: { CustomButton }, data() { return { totalClicks: 0 }; }, methods: { handleIncrement() { this.totalClicks++; } } }; </script>3. 运行效果
以上就是详解vue 组件的详细内容,更多关于vue组件的资料请关注其它相关文章!
RTX 5090要首发 性能要翻倍!三星展示GDDR7显存
三星在GTC上展示了专为下一代游戏GPU设计的GDDR7内存。
首次推出的GDDR7内存模块密度为16GB,每个模块容量为2GB。其速度预设为32 Gbps(PAM3),但也可以降至28 Gbps,以提高产量和初始阶段的整体性能和成本效益。
据三星表示,GDDR7内存的能效将提高20%,同时工作电压仅为1.1V,低于标准的1.2V。通过采用更新的封装材料和优化的电路设计,使得在高速运行时的发热量降低,GDDR7的热阻比GDDR6降低了70%。
更新日志
- 群星《歌手2024 第13期》[FLAC/分轨][325.93MB]
- 阿木乃《爱情买卖》DTS-ES【NRG镜像】
- 江蕾《爱是这样甜》DTS-WAV
- VA-Hair(OriginalBroadwayCastRecording)(1968)(PBTHAL24-96FLAC)
- 博主分享《美末2RE》PS5 Pro运行画面 玩家仍不买账
- 《双城之战2》超多新歌MV发布:林肯公园再次献声
- 群星《说唱梦工厂 第11期》[320K/MP3][63.25MB]
- 群星《说唱梦工厂 第11期》[FLAC/分轨][343.07MB]
- 群星《闪光的夏天 第5期》[320K/MP3][79.35MB]
- 秀兰玛雅.1999-友情人【大旗】【WAV+CUE】
- 小米.2020-我想在城市里当一个乡下人【滚石】【FLAC分轨】
- 齐豫.2003-THE.UNHEARD.OF.CHYI.3CD【苏活音乐】【WAV+CUE】
- 黄乙玲1986-讲什么山盟海誓[日本东芝版][WAV+CUE]
- 曾庆瑜1991-柔情陷阱[台湾派森东芝版][WAV+CUE]
- 陈建江《享受男声》DTS-ES6.1【WAV】