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

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

Vue 中如何將函數作為 props 傳遞給組件的實現代碼

瀏覽:5日期:2023-01-21 14:09:56

本文 GitHub https://github.com/qq44924588 ... 上已經收錄,更多往期高贊文章的分類,也整理了很多我的文檔,和教程資料。歡迎Star和完善,大家面試可以參照考點復習,希望我們一起有點東西。

Vue 新手經常問的一個常見問題。可以將字符串、數組、數字和對象作為props傳遞。但是你能把一個函數當作一個props來傳遞嗎?

雖然可以將函數作為props傳遞,但這種方式不好。相反,Vue 有一個專門為解決這問題而設計的功能,接下來,我們來看看。

向組件傳入函數

獲取一個函數或方法并將其作為一個prop傳遞給子組件相對比較簡單。實際上,它與傳遞任何其他變量方式完全相同:

<template> <ChildComponent :function='myFunction' /></template>export default { methods: { myFunction() { // ... } }};

正如前面所說,在Vue中永遠都不要做這樣的事情。

為什么?Vue有更好的東西。

大家都說簡歷沒項目寫,我就幫大家找了一個項目,還附贈【搭建教程】。

React vs Vue

如果使用過 React,就會習慣傳遞函數方式。

在React中,我們可以將一個函數從父組件傳遞給子組件,以便子組件能夠向上與父組件通信。props 和 data 向下流動,函數調用向上流動。

然而,Vue有一種不同的機制來實現子到父通信方式,Vue 使用事件。

這與 DOM 的工作方式相同-與React相比,Vue 的方式與瀏覽器的一致性更高。 元素可以發出事件,并且可以監聽這些事件。

因此,盡管在Vue中可以把函數作為prop傳遞,但它被認為是一種反模式。

使用事件

事件是我們與 Vue 中的父組件通信的方式。

這里有一個簡短的例子來說明事件是如何工作的。

首先,我們將創建子組件,該子組件在創建時會發出一個事件:

// ChildComponentexport default { created() { this.$emit(’created’); }}

在父組件中,我們監聽該事件:

<template> <ChildComponent @created='handleCreate' /></template>export default { methods: { handleCreate() { console.log(’Child has been created.’); } }};

事件可以做的事情還有很多,而這僅僅是皮毛。強烈建議查看官方的Vue文檔來了解更多關信息,絕對值得一讀。

但是事件并不能完全解決我們所有的問題。

從子組件訪問父組件的作用域里數據

在許多情況下,我們試圖解決的問題是訪問來自不同作用域的數據。

父組件有一個作用域,子組件有另一個作用域。

通常,我們希望從父組件訪問子組件中的值,或者從子組件訪問父組件中的值。Vue阻止我們直接這樣做,這是一件好事。

它使我們的組件更加具有封裝性,并提高了它們的可重用性。這使我們的代碼更簡潔,并從長遠來看避免了許多令人頭痛的問題。

但是有時候我們可能會試圖通過函數來繞過這個問題。

從父類獲取值

如果希望子組件訪問父組件的方法,那么將方法直接作為 prop 傳遞似乎簡單明了。

在父組件中我們會這樣做:

<!-- Parent --><template> <ChildComponent :method='parentMethod' /></template>// Parentexport default { methods: { parentMethod() { // ... } }}

在我們的子組件中,使用傳入的方法:

這樣做會有什么問題?

這并不是完全錯誤的,但是在這種情況下使用事件會更好。

然后,當需要時,子組件不會調用該函數,而只是發出一個事件。然后父組件將接收該事件,調用該函數,拼裝將更新傳遞給子組件的 prop。

這是達到同樣效果的更好的方法。

在其他情況下,我們可能想要從子元素中獲取一個值到父元素中,我們為此使用了函數。

例如,你可能正在這樣做。父函數接受子函數的值并對其進行處理:

<!-- Parent --><template> <ChildComponent :method='parentMethod' /></template>// Parentexport default { methods: { parentMethod(valueFromChild) { // Do something with the value console.log(’From the child:’, valueFromChild); } }}

在子組件中調用傳入的方法并將子組件的值作為方法的參數傳入:

// Childexport default { props: { method: { type: Function }, }, data() { return { value: ’I am the child.’ }; }, mounted() { // Pass a value to the parent through the function this.method(this.value); }}

這也不是完全錯誤的,這樣做是可行的。

只是這不是在Vue中的最佳方式。相反,事件更適合解決這個問題。我們可以使用事件來實現完全相同的事情

<!-- Parent --><template> <ChildComponent @send-message='handleSendMessage' /></template>// Parentexport default { methods: { handleSendMessage(event, value) { // Our event handler gets the event, as well as any // arguments the child passes to the event console.log(’From the child:’, value); } }}

在子組件中,我們發出事件:

// Childexport default { props: { method: { type: Function }, }, data() { return { value: ’I am the child.’ }; }, mounted() { // Instead of calling the method we emit an event this.$emit(’send-message’, this.value); }}

事件在Vue中非常有用,但它們也不能100%地解決我們的問題。有時,我們需要以不同的方式從父級訪問子級的作用域。

為此,我們使用作用域插槽!

使用作用域插槽

作用域插槽是一個更高級的主題,但是它們也非常有用。事實上,我認為它們是Vue提供的最強大的功能之一。

它們弱化了子作用域和父作用域之間的界限。但是它以一種非常干凈的方式完成,使得我們的組件像以前一樣可組合。

如果你想了解更多關于作用域插槽是如何工作的,可以先看看官方文檔,或者我們下回講解。

代碼部署后可能存在的BUG沒法實時知道,事后為了解決這些BUG,花了大量的時間進行log 調試,這邊順便給大家推薦一個好用的BUG監控工具 Fundebug。

來源:https://stackoverflow.com/que...

總結

到此這篇關于Vue 中如何將函數作為 props 傳遞給組件的實現代碼的文章就介紹到這了,更多相關vue props 傳遞給組件內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Vue
相關文章:
主站蜘蛛池模板: 烟台金蝶财务软件,烟台网站建设,烟台网络推广 | 海德莱电力(HYDELEY)-无功补偿元器件生产厂家-二十年专业从事电力电容器 | 合肥地磅_合肥数控切割机_安徽地磅厂家_合肥世佳电工设备有限公司 | 扬州汇丰仪表有限公司 | 右手官网|右手工业设计|外观设计公司|工业设计公司|产品创新设计|医疗产品结构设计|EMC产品结构设计 | 全自动定氮仪-半自动凯氏定氮仪厂家-祎鸿仪器 | 纸塑分离机-纸塑分离清洗机设备-压力筛-碎浆机厂家金双联环保 | 锂辉石检测仪器,水泥成分快速分析仪-湘潭宇科分析仪器有限公司 | 济南ISO9000认证咨询代理公司,ISO9001认证,CMA实验室认证,ISO/TS16949认证,服务体系认证,资产管理体系认证,SC食品生产许可证- 济南创远企业管理咨询有限公司 郑州电线电缆厂家-防火|低压|低烟无卤电缆-河南明星电缆 | 节流截止放空阀-不锈钢阀门-气动|电动截止阀-鸿华阀门有限公司 | PVC地板|PVC塑胶地板|PVC地板厂家|地板胶|防静电地板-无锡腾方装饰材料有限公司-咨询热线:4008-798-128 | 上海律师咨询_上海法律在线咨询免费_找对口律师上策法网-策法网 广东高华家具-公寓床|学生宿舍双层铁床厂家【质保十年】 | 泥沙分离_泥沙分离设备_泥砂分离机_洛阳隆中重工机械有限公司 | 一技任务网_有一技之长,就来技术任务网 | 多功能真空滤油机_润滑油全自动滤油机_高效真空滤油机价格-重庆润华通驰 | 原色会计-合肥注册公司_合肥代理记账公司_营业执照代办 | 厦门ISO认证|厦门ISO9001认证|厦门ISO14001认证|厦门ISO45001认证-艾索咨询专注ISO认证行业 | 100国际学校招生 - 专业国际学校择校升学规划 | 福州仿石漆加盟_福建仿石漆厂家-外墙仿石漆加盟推荐铁壁金钢(福建)新材料科技有限公司有保障 | 河南膏药贴牌-膏药代加工-膏药oem厂家-洛阳今世康医药科技有限公司 | 湖南自考_湖南自学考试网| 锤式粉碎机,医药粉碎机,锥式粉碎机-无锡市迪麦森机械制造有限公司 | 不锈钢反应釜,不锈钢反应釜厂家-价格-威海鑫泰化工机械有限公司 不干胶标签-不干胶贴纸-不干胶标签定制-不干胶标签印刷厂-弗雷曼纸业(苏州)有限公司 | 恒温恒湿箱(药品/保健品/食品/半导体/细菌)-兰贝石(北京)科技有限公司 | 上海小程序开发-小程序制作-上海小程序定制开发公司-微信商城小程序-上海咏熠 | 西安耀程造价培训机构_工程预算实训_广联达实作实操培训 | 吹塑加工_大型吹塑加工_滚塑代加工-莱力奇吹塑加工有限公司 | 膏方加工_丸剂贴牌_膏滋代加工_湖北康瑞生物科技有限公司 | 量子管通环-自清洗过滤器-全自动反冲洗过滤器-沼河浸过滤器 | 铝机箱_铝外壳加工_铝外壳厂家_CNC散热器加工-惠州市铂源五金制品有限公司 | 电子书导航网_电子书之家_电子书大全_最新电子书分享发布平台 | 防爆电机-高压防爆电机-ybx4电动机厂家-河南省南洋防爆电机有限公司 | 地埋式垃圾站厂家【佳星环保】小区压缩垃圾中转站转运站 | 带式过滤机厂家_价格_型号规格参数-江西核威环保科技有限公司 | ORP控制器_ORP电极价格-上优泰百科 | 深圳宣传片制作_产品视频制作_深圳3D动画制作公司_深圳短视频拍摄-深圳市西典映画传媒有限公司 | 专业的压球机生产线及解决方案厂家-河南腾达机械厂 | 深圳活动策划公司|庆典策划|专业公关活动策划|深圳艺典文化传媒 重庆中专|职高|技校招生-重庆中专招生网 | 掺铥光纤放大器-C/L波段光纤放大器-小信号光纤放大器-合肥脉锐光电技术有限公司 | 沈阳缠绕包装机厂家直销-沈阳海鹞托盘缠绕包装机价格 | 飞歌臭氧发生器厂家_水处理臭氧发生器_十大臭氧消毒机品牌 |