網站首頁 Vue 正文
1. 概述
墨菲定律告訴我們:人總是容易犯錯誤的,無論科技發展到什么程度,無論是什么身份的人,錯誤總是會在不經意間發生。因此我們最好在做重要的事情時,盡量去預估所有可能發生的錯誤,并思考錯誤發生后的補救方案,再準備一個或多個備選方案。這樣才能做到有備無患,防患于未來。
言歸正傳,之前我們聊了組件的傳參,今天我們來聊一下Non-Props 屬性,Non-Props 這個詞,不了解的同學一定覺得很高深,其實很簡單,之前講的組件傳參,子組件會使用 props:[''] 的方式接收父組件傳遞的參數,如果子組件不使用props:['']接收參數,那這個參數就是一個Non-Props 屬性。下面我們通過例子來詳細看一下。
2.Non-Props 屬性
2.1 初識Non-Props 屬性
<body> <div id="myDiv"></div> </body> <script> const app = Vue.createApp({ template:` <div> <test message="hello" /> </div> ` }); app.component("test", { template:` <div>123</div> ` }); const vm = app.mount("#myDiv");
這個例子中,雖然主組件在使用 test 子組件時,傳了 message 參數,但子組件沒有接收,會發生什么事情,看下面截圖:
最后渲染時,把 message = "hello" 原封不動的渲染到了 test 子組件的最外層標簽上
2.2 不想把Non-Props 屬性 渲染到最外層標簽
我們希望我不接收的屬性,就是不接收,不要渲染到最外層標簽
app.component("test", { inheritAttrs:false, template:` <div>123</div> ` });
在子組件中增加屬性inheritAttrs:false,Non-Props 屬性就不會渲染到最外層標簽了
2.3Non-Props 屬性的使用場景
大家可能會問,這個屬性子組件不需要,VUE 還硬放到子組件的最外層元素,這是為什么,有什么用呢,我們來看下面的例子
const app = Vue.createApp({ template:` <div> <test style="color:red" /> </div> ` }); app.component("test", { template:` <div>123</div> ` });
從這個例子就能看出,當父組件想為子組件添加樣式時,使用Non-Props 屬性 就非常合適,也適合于其他單純傳遞屬性的場景。
2.4 子組件有多個最外層標簽
剛才講了,Non-Props 屬性 會往子組件最外層的標簽渲染屬性,當子組件有多個最外層標簽時,VUE 會如何渲染呢,看下面的例子
const app = Vue.createApp({ template:` <div> <test style="color:red" class="myClass" /> </div> ` }); app.component("test", { template:` <div>123</div> <div>456</div> <div>789</div> ` });
三個最外層標簽都沒有父組件傳遞的屬性,VUE 不知道該給哪個標簽渲染,干脆就不渲染了
2.5 為某個最外層標簽渲染
如果我們希望某個標簽可以拿到父組件的屬性,可以這樣寫
const app = Vue.createApp({ template:` <div> <test style="color:red" class="myClass" /> </div> ` }); app.component("test", { template:` <div>123</div> <div v-bind="$attrs" >456</div> <div>789</div> ` });
使用 v-bind="$attrs",讓 VUE 知道這個標簽需要父組件的屬性
2.6 獲取父組件傳遞的某一個屬性
上面的例子,子組件中間的 div 標簽被渲染了父組件傳遞的所有屬性,如果這個標簽只需要的其中一個或幾個屬性,可以這么寫
const app = Vue.createApp({ template:` <div> <test style="color:red" class="myClass" /> </div> ` }); app.component("test", { template:` <div>123</div> <div :style="$attrs.style" >456</div> <div>789</div> ` });
這樣,中間的 div 只被渲染了 style 屬性,而沒有 class 屬性
2.7 生命周期函數獲取Non-Props 屬性
子組件的生命周期函數,也是可以獲取Non-Props 屬性的,我們來看下面的例子
app.component("test", { mounted() { console.info(this.$attrs.class); }, template:` <div>123</div> <div :style="$attrs.style" >456</div> <div>789</div> ` });
3. 綜述
原文鏈接:https://www.cnblogs.com/w84422/p/15834960.html
相關推薦
- 2022-10-02 echarts動態獲取Django數據的實現示例_python
- 2022-11-24 C++?OpenCV實現boxfilter方框濾波的方法詳解_C 語言
- 2022-07-09 利用go語言判斷是否是完全二叉樹_Golang
- 2023-01-17 Python使用鄰接矩陣實現圖及Dijkstra算法問題_python
- 2022-02-02 Maven命令安裝本地jar包到本地倉庫
- 2021-12-11 C++嵌入式內存管理詳情_C 語言
- 2022-04-03 ?Python?代碼制作動態鞭炮_python
- 2022-10-06 zabbix如何添加監控主機和自定義監控項_zabbix
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支