电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

詳解vue 組件

瀏覽:119日期:2023-01-14 09:32:42

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='http://www.hdgsjgj.cn/bcjs/assets/logo.png' /> <customButton></customButton> <customButton></customButton> <customButton></customButton> </div></template>

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>

運行效果

詳解vue 組件

2. 通過插槽<slot></slot>

組件在需要替換的地方放入插槽<slot></slot>

<template> <button style='margin:10px'><slot>Defalt Button</slot></button></template><script>export default { props: { buttonText: String }};</script>

調用者的innerHtml會替換插槽的值,若為空,使用默認的

運行效果

詳解vue 組件

注意:看到是用自定義組件的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 組件的詳細內容,更多關于vue組件的資料請關注好吧啦網其它相關文章!

標簽: Vue
相關文章:
主站蜘蛛池模板: 冷库安装厂家_杭州冷库_保鲜库建设-浙江克冷制冷设备有限公司 | 云南成人高考网| 回转支承-转盘轴承-回转驱动生产厂家-洛阳隆达轴承有限公司 | 天坛家具官网 | 交变/复合盐雾试验箱-高低温冲击试验箱_安奈设备产品供应杭州/江苏南京/安徽马鞍山合肥等全国各地 | 合肥注册公司|合肥代办营业执照、2024注册公司流程 | 帽子厂家_帽子工厂_帽子定做_义乌帽厂_帽厂_制帽厂_帽子厂_浙江高普制帽厂 | 海外仓系统|国际货代系统|退货换标系统|WMS仓储系统|海豚云 | 超声波清洗机_细胞破碎仪_实验室超声仪器_恒温水浴-广东洁盟深那仪器 | 铝镁锰板_铝镁锰合金板_铝镁锰板厂家_铝镁锰金属屋面板_安徽建科 | 苏州注册公司_苏州代理记账_苏州工商注册_苏州代办公司-恒佳财税 | 电池高低温试验箱-气态冲击箱-双层电池防爆箱|简户百科 | 考勤系统_人事考勤管理系统_本地部署BS考勤系统_考勤软件_天时考勤管理专家 | 水篦子|雨篦子|镀锌格栅雨水篦子|不锈钢排水篦子|地下车库水箅子—安平县云航丝网制品厂 | 超细|超微气流粉碎机|气流磨|气流分级机|粉体改性机|磨粉机|粉碎设备-山东埃尔派粉体科技 | DAIKIN电磁阀-意大利ATOS电磁阀-上海乾拓贸易有限公司 | 多物理场仿真软件_电磁仿真软件_EDA多物理场仿真软件 - 裕兴木兰 | 风电变桨伺服驱动器-风电偏航变桨系统-深圳众城卓越科技有限公司 | 背压阀|减压器|不锈钢减压器|减压阀|卫生级背压阀|单向阀|背压阀厂家-上海沃原自控阀门有限公司 本安接线盒-本安电路用接线盒-本安分线盒-矿用电话接线盒-JHH生产厂家-宁波龙亿电子科技有限公司 | 广州小程序开发_APP开发公司_分销商城系统定制_小跑科技 | 杭州画室_十大画室_白墙画室_杭州美术培训_国美附中培训_附中考前培训_升学率高的画室_美术中考集训美术高考集训基地 | 许昌奥仕达自动化设备有限公司 | 南京租车,南京汽车租赁,南京包车,南京会议租车-南京七熹租车 | 自动化展_机器人展_机床展_工业互联网展_广东佛山工博会 | 生物制药洁净车间-GMP车间净化工程-食品净化厂房-杭州波涛净化设备工程有限公司 | 湖南自考_湖南自学考试网| 屏蔽服(500kv-超高压-特高压-电磁)-徐吉电气 | 南京技嘉环保科技有限公司-杀菌除臭剂|污水|垃圾|厕所|橡胶厂|化工厂|铸造厂除臭剂 | 防水试验机_防水测试设备_防水试验装置_淋雨试验箱-广州岳信试验设备有限公司 | 垃圾清运公司_环卫保洁公司_市政道路保洁公司-华富环境 | 鑫达滑石-辽宁鑫达滑石集团 | 天津市能谱科技有限公司-专业的红外光谱仪_红外测油仪_紫外测油仪_红外制样附件_傅里叶红外光谱技术生产服务厂商 | 杭州ROHS检测仪-XRF测试仪价格-百科| 多物理场仿真软件_电磁仿真软件_EDA多物理场仿真软件 - 裕兴木兰 | 气动球阀_衬氟蝶阀_调节阀_电动截止阀_上海沃托阀门有限公司 | HEYL硬度计量泵-荧光法在线溶解氧仪-净时测控技术(上海)有限公司 | 纯水电导率测定仪-万用气体检测仪-低钠测定仪-米沃奇科技(北京)有限公司www.milwaukeeinst.cn 锂辉石检测仪器,水泥成分快速分析仪-湘潭宇科分析仪器有限公司 手术室净化装修-手术室净化工程公司-华锐手术室净化厂家 | TPE_TPE热塑性弹性体_TPE原料价格_TPE材料厂家-惠州市中塑王塑胶制品公司- 中塑王塑胶制品有限公司 | 宝鸡市人民医院| 机器视觉检测系统-视觉检测系统-机器视觉系统-ccd检测系统-视觉控制器-视控一体机 -海克易邦 | 超声波清洗机_大型超声波清洗机_工业超声波清洗设备-洁盟清洗设备 |