亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

 更新時間:2020年11月12日 10:22:22   作者:隨意花  
這篇文章主要介紹了vue 解決provide和inject響應(yīng)的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

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

provide:

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

inject:

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

要實現(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>

輸出:

初始化:

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

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

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

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

補充知識: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 class="comment-list" 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)聽一個自定義事件,但是只觸發(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)聽器;

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

vm.$destroy()

用法:

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

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

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

 obj:{
 arr:[]
 }

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

需要新增一個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)用時,可以觸發(fā)頁面全部重新渲染。

provide:Object | () => Object

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

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

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

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

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

一個對象,對象的 key 是本地的綁定名,value 是:

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

一個對象,該對象的:

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

default 屬性是降級情況下使用的 value

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

示例:

// 父級組件提供 ‘foo'

 var Provider = {
 provide: {
  foo: 'bar'
 },
 // ...
 }

// 子組件注入 'foo'

 var Child = {
 inject: ['foo'],
 created () {
  console.log(this.foo) // => "bar"
 }
 // ...
 }

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

相關(guān)文章

  • vue+webpack 打包文件 404 頁面空白的解決方法

    vue+webpack 打包文件 404 頁面空白的解決方法

    下面小編就為大家分享一篇vue+webpack 打包文件 404 頁面空白的解決方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-02-02
  • vue大屏自適應(yīng)的實現(xiàn)方法(cv就能用)

    vue大屏自適應(yīng)的實現(xiàn)方法(cv就能用)

    最近在用VUE寫大屏頁面,遇到屏幕自適應(yīng)問題,下面這篇文章主要給大家介紹了關(guān)于vue大屏自適應(yīng)的實現(xiàn)方法,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-06-06
  • Vue export import 導(dǎo)入導(dǎo)出的多種方式與區(qū)別介紹

    Vue export import 導(dǎo)入導(dǎo)出的多種方式與區(qū)別介紹

    這篇文章主要介紹了Vue export import 導(dǎo)入導(dǎo)出的多種方式與區(qū)別介紹,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-02-02
  • 基于Vue實現(xiàn)簡單的貪食蛇游戲

    基于Vue實現(xiàn)簡單的貪食蛇游戲

    貪食蛇是一個非常經(jīng)典的游戲,?在游戲中,?玩家操控一條細(xì)長的直線,?它會不停前進(jìn),?玩家只能操控蛇的頭部朝向,?一路拾起觸碰到之物。本文將用Vue實現(xiàn)這一游戲,感興趣的可以嘗試一下
    2022-04-04
  • vue項目中使用iconfont方式

    vue項目中使用iconfont方式

    這篇文章主要介紹了vue項目中使用iconfont方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • vue項目本地開發(fā)完成后部署到服務(wù)器后報404錯誤解決方案

    vue項目本地開發(fā)完成后部署到服務(wù)器后報404錯誤解決方案

    很多時候我們發(fā)現(xiàn)辛辛苦苦寫的VueJs應(yīng)用經(jīng)過打包后在自己本地搭建的服務(wù)器上測試沒有什么問題,但真正放在服務(wù)器上后會發(fā)現(xiàn)或多或少的問題,這篇文章主要給大家介紹了關(guān)于vue項目本地開發(fā)完成后部署到服務(wù)器后報404錯誤的解決方案,需要的朋友可以參考下
    2024-01-01
  • vue的插槽原來該這樣理解

    vue的插槽原來該這樣理解

    這篇文章主要為大家詳細(xì)介紹了vue的插槽,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02
  • vue 根據(jù)選擇的月份動態(tài)展示日期對應(yīng)的星期幾

    vue 根據(jù)選擇的月份動態(tài)展示日期對應(yīng)的星期幾

    這篇文章主要介紹了vue 如何根據(jù)選擇的月份動態(tài)展示日期對應(yīng)的星期幾,幫助大家更好的利用vue框架處理日期需求,感興趣的朋友可以了解下
    2021-02-02
  • VUE搭建分布式醫(yī)療掛號系統(tǒng)后臺管理頁面示例步驟

    VUE搭建分布式醫(yī)療掛號系統(tǒng)后臺管理頁面示例步驟

    這篇文章主要為大家介紹了分布式醫(yī)療掛號系統(tǒng)之搭建后臺管理系統(tǒng)頁面,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-04-04
  • vue路由攔截器和請求攔截器知識點總結(jié)

    vue路由攔截器和請求攔截器知識點總結(jié)

    在本篇文章里小編給各位整理的是一篇關(guān)于vue路由攔截器和請求攔截器知識點總結(jié)文章,有興趣的朋友們學(xué)習(xí)下。
    2019-11-11

最新評論