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

您的位置:首頁技術(shù)文章
文章詳情頁

vue 解決provide和inject響應(yīng)的問題

瀏覽:2日期:2022-10-31 10:03:48

官網(wǎng)上說provide 和 inject 綁定并不是可響應(yīng)的。這是刻意為之的。然而,如果你傳入了一個(gè)可監(jiān)聽的對象,那么其對象的屬性還是可響應(yīng)的。

provide:

Object | () => Object(一個(gè)對象或返回一個(gè)對象的函數(shù))

inject:

Array | { [key: string]: string | Symbol | Object }(一個(gè)字符串?dāng)?shù)組,或一個(gè)對象,對象的 key 是本地的綁定名)

要實(shí)現(xiàn)父子組件響應(yīng),父組件傳遞的數(shù)據(jù)類型必須是對象Object,子組件接收的數(shù)據(jù)類型必須是對象Object,其他數(shù)據(jù)類型都是不好使的

provide和inject響應(yīng)的例子:

父組件:

<template> <div class='menu'> <label>父組件輸入框:</label> <input v-model='level.name' @change='levelChange(level.name)'/> <!-- 子組件 --> <my-list></my-list> </div></template>

<script>import MyList from ’@/pages/user/children/MyList’export default { components:{MyList}, provide(){ return { userLevel:this.level, } }, data(){ return{ level:{name:'初始化'}, } }, methods:{ levelChange(val){ this.userLevel = this.level; console.log(this.userLevel )//可以打印出對象屬性name值改變了 } }}</script>

子組件(MyList.vue)

<template> <div class='my-list'> <p>子組件接收數(shù)據(jù):{{userLevel.name}}</p> <label>父組件輸入框:</label><input type='text' v-model='userLevel.name'> </div></template>

<script>export default { // inject:[’userLevel’], inject:{ userLevel:{ default:()=>{} }, }, data(){ return{ } } }</script>

輸出:

初始化:

vue 解決provide和inject響應(yīng)的問題

修改父組件數(shù)據(jù):輸入框的值是'初始',子組件也輸出'初始

vue 解決provide和inject響應(yīng)的問題

修改子組件數(shù)據(jù):輸入框的值是'子組件',父組件輸入框也顯示'子組件'

vue 解決provide和inject響應(yīng)的問題

好啦,provide和inject實(shí)現(xiàn)響應(yīng),父組件的數(shù)據(jù)修改影響了子組件的更新,子組件的數(shù)據(jù)修改同樣影響了父組件的更新。

數(shù)據(jù)格式為對象Object的類型,父組件修改數(shù)據(jù)影響子組件,子組件修改數(shù)據(jù)影響父組件,感覺和對象的存儲(chǔ)有關(guān),對象格式數(shù)據(jù)存儲(chǔ)的是指針而不是數(shù)據(jù),所以父子組件其實(shí)是用的同一個(gè)對象,修改的也是同一個(gè)對象,因此會(huì)實(shí)現(xiàn)雙向響應(yīng)改變,不知道我這樣理解的是由有問題。

補(bǔ)充知識(shí):vue監(jiān)聽賦值值以及provide與inject

vue 當(dāng)父組件 改變 子組件的props 卻不變

watch: { ’oState’: function (val,oldval) { this.getOrderList({orderStatus: this.getOrderState(this.oState), pageSize: 1}) }, // 深度 watcher c: { handler: function (val, oldVal) { /* ... */ }, deep: true }, },

$refs

<ul v-if='list' ref='commentList'></ul> scrollToTop () { this.$refs.commentList.scrollTop = 0 }

$el

this.$refs.studentListDialog.$el.querySelector(’.el-dialog’)

vm.$once( event, callback )

參數(shù):

{string} event

{Function} callback

用法:

監(jiān)聽一個(gè)自定義事件,但是只觸發(fā)一次,在第一次觸發(fā)之后移除監(jiān)聽器。

vm.$off( [event, callback] )

參數(shù):

{string | Array<string>} event (只在 2.2.2+ 支持?jǐn)?shù)組)

{Function} [callback]

用法:

移除自定義事件監(jiān)聽器。

如果沒有提供參數(shù),則移除所有的事件監(jiān)聽器;

如果只提供了事件,則移除該事件所有的監(jiān)聽器;

如果同時(shí)提供了事件與回調(diào),則只移除這個(gè)回調(diào)的監(jiān)聽器。

vm.$destroy()

用法:

完全銷毀一個(gè)實(shí)例。清理它與其它實(shí)例的連接,解綁它的全部指令及事件監(jiān)聽器。

觸發(fā) beforeDestroy 和 destroyed 的鉤子。

當(dāng)生成vue實(shí)例后,當(dāng)再次給數(shù)據(jù)賦值時(shí),有時(shí)候并不會(huì)自動(dòng)更新到視圖上去

obj:{ arr:[] }

雙向綁定后無法直接改變obj.arr

需要新增一個(gè)arr賦值或者

this.$set(this.ruleForm, ’date’, time)

vue.set(target,key,value)

參數(shù)

{object | Array} target

{string | number} key

{any} value

this.$set()和Vue.set()本質(zhì)方法一樣,前者可以用在methods中使用。

set方法調(diào)用時(shí),可以觸發(fā)頁面全部重新渲染。

provide:Object | () => Object

inject:Array<string> | { [key: string]: string | Symbol | Object }

這對選項(xiàng)需要一起使用,以允許一個(gè)祖先組件向其所有子孫后代注入一個(gè)依賴,不論組件層次有多深,并在起上下游關(guān)系成立的時(shí)間里始終生效。如果你熟悉 React,這與 React 的上下文特性很相似。

provide 選項(xiàng)應(yīng)該是一個(gè)對象或返回一個(gè)對象的函數(shù)。該對象包含可注入其子孫的屬性。在該對象中你可以使用 ES2015 Symbols 作為 key,但是只在原生支持 Symbol 和 Reflect.ownKeys 的環(huán)境下可工作。

inject 選項(xiàng)應(yīng)該是:

一個(gè)字符串?dāng)?shù)組,或

一個(gè)對象,對象的 key 是本地的綁定名,value 是:

在可用的注入內(nèi)容中搜索用的 key (字符串或 Symbol),或

一個(gè)對象,該對象的:

from 屬性是在可用的注入內(nèi)容中搜索用的 key (字符串或 Symbol)

default 屬性是降級(jí)情況下使用的 value

提示:provide 和 inject 綁定并不是可響應(yīng)的。這是刻意為之的。然而,如果你傳入了一個(gè)可監(jiān)聽的對象,那么其對象的屬性還是可響應(yīng)的。

示例:

// 父級(jí)組件提供 ‘foo’ var Provider = { provide: { foo: ’bar’ }, // ... }// 子組件注入 ’foo’ var Child = { inject: [’foo’], created () { console.log(this.foo) // => 'bar' } // ... }

以上這篇vue 解決provide和inject響應(yīng)的問題就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Vue
相關(guān)文章:
主站蜘蛛池模板: 钢化玻璃膜|手机钢化膜|钢化膜厂家|手机保护膜-【东莞市大象电子科技有限公司】 | 天津货架厂_穿梭车货架_重型仓储货架_阁楼货架定制-天津钢力仓储货架生产厂家_天津钢力智能仓储装备 | 南京蜂窝纸箱_南京木托盘_南京纸托盘-南京博恒包装有限公司 | 齿轮减速马达一体式_蜗轮蜗杆减速机配电机-德国BOSERL齿轮减速电动机生产厂家 | 福州时代广告制作装饰有限公司-福州广告公司广告牌制作,福州展厅文化墙广告设计, | Trimos测长机_测高仪_TESA_mahr,WYLER水平仪,PWB对刀仪-德瑞华测量技术(苏州)有限公司 | 胜为光纤光缆_光纤跳线_单模尾纤_光纤收发器_ODF光纤配线架厂家直销_北京睿创胜为科技有限公司 - 北京睿创胜为科技有限公司 | 衬塑设备,衬四氟设备,衬氟设备-淄博鲲鹏防腐设备有限公司 | 热工多功能信号校验仪-热电阻热电偶校验仿真仪-金湖虹润仪表 | 众品家具网-家具品牌招商_家具代理加盟_家具门户的首选网络媒体。 | 仿真植物|仿真树|仿真花|假树|植物墙 - 广州天昆仿真植物有限公司 | 发电机价格|发电机组价格|柴油发电机价格|柴油发电机组价格网 | 北京网站建设公司_北京网站制作公司_北京网站设计公司-北京爱品特网站建站公司 | 湖南教师资格网-湖南教师资格证考试网 | 工业铝型材生产厂家_铝合金型材配件批发精加工定制厂商 - 上海岐易铝业 | 万濠影像仪(万濠投影仪)百科-苏州林泽仪器 | 恒温槽_恒温水槽_恒温水浴槽-上海方瑞仪器有限公司 | ZHZ8耐压测试仪-上海胜绪电气有限公司| 注塑_注塑加工_注塑模具_塑胶模具_注塑加工厂家_深圳环科 | 选宝石船-陆地水上开采「精选」色选机械设备-青州冠诚重工机械有限公司 | POS机办理_个人pos机免费领取-银联pos机申请首页 | 粉末包装机-给袋式包装机-全自动包装机-颗粒-液体-食品-酱腌菜包装机生产线【润立机械】 | 玉米深加工设备|玉米加工机械|玉米加工设备|玉米深加工机械-河南成立粮油机械有限公司 | LHH药品稳定性试验箱-BPS系列恒温恒湿箱-意大利超低温冰箱-上海一恒科学仪器有限公司 | 哈尔滨治「失眠/抑郁/焦虑症/精神心理」专科医院排行榜-京科脑康免费咨询 一对一诊疗 | 不锈钢复合板厂家_钛钢复合板批发_铜铝复合板供应-威海泓方金属复合材料股份有限公司 | 聚合氯化铝价格_聚合氯化铝厂家_pac絮凝剂-唐达净水官网 | 石家庄小程序开发_小程序开发公司_APP开发_网站制作-石家庄乘航网络科技有限公司 | 重庆轻质隔墙板-重庆安吉升科技有限公司| 厂房出租_厂房出售_产业园区招商_工业地产&nbsp;-&nbsp;中工招商网 | 校园气象站_超声波气象站_农业气象站_雨量监测站_风途科技 | 求是网 - 思想建党 理论强党| SMC-ASCO-CKD气缸-FESTO-MAC电磁阀-上海天筹自动化设备官网 | 数控专用机床,专用机床,自动线,组合机床,动力头,自动化加工生产线,江苏海鑫机床有限公司 | 电梯乘运质量测试仪_电梯安全评估测试仪-武汉懿之刻 | 智慧养老_居家养老_社区养老_杰佳通 | 合肥汽车充电桩_安徽充电桩_电动交流充电桩厂家_安徽科帝新能源科技有限公司 | 宜兴紫砂壶知识分享 - 宜兴壶人 医用空气消毒机-医用管路消毒机-工作服消毒柜-成都三康王 | 艺术生文化课培训|艺术生文化课辅导冲刺-济南启迪学校 | 东风体检车厂家_公共卫生体检车_医院体检车_移动体检车-锦沅科贸 | 皮带式输送机械|链板式输送机|不锈钢输送机|网带输送机械设备——青岛鸿儒机械有限公司 |