vue父組件異步獲取動態數據傳遞給子組件獲取不到值

原理:

? ? ? ?在父組件中使用axios獲取異步數據傳給子組件,但是發現子組件在渲染的時候并沒有數據,在created里面打印也是空的,結果發現一開始子組件綁定的數據是空的,在請求數據沒有返回數據時,子組件就已經加載了,并且他綁定的值也是空的

使用vuex全局狀態管理,其實簡單,利用vuex的輔助函數(mapState,mapMutations)mapState是將state里面的數據映射到計算中(computed),mapMutations也是類似,把vuex中mutations的方法映射到組件里面,就可以在組件里面直接使用方法了,在vuex中使用異步(actions)去掉用接口,然后在接口成功的函數里面取觸發同步(mutations)里面的方法,把得到數據傳給mutations里面的方法里并且給state里面的屬性賦值,然后就可以在子組件中使用computed計算中去獲取數據并且渲染到頁面上
vuex / index.js
import Vue from 'vue'
import Vuex from 'vuex' import axios from 'axios' Vue.use(Vuex) export default new Vuex.Store({ //定義初始數據 state: { title: '', list: [], isShow: false }, //同步的方法 mutations: { //向state 里面設置數據 changeListMutation(state, list) { state.list = list }, //在list.vue里面點擊下拉選項的時候觸發 給state.title賦值 changeTitleMutation(state, title) { state.title = title }, //selectinput.vue里面點擊input的時候觸發 給state.isShow賦值 toggleShow(state, isShow) { state.isShow = isShow } }, //異步的方法 actions: { //在list.vue里面created生命周期里面觸發 getListAction({ commit }) { axios.get('/mock/5afd9dc0c088691e06a6ab45/example/dataList') .then((res) => { commit('changeListMutation', res.data) //調用mutations下面的changeListMutation方法并且傳值過去 }) .catch((error) => { console.log(error) }) } } })

父組件 select.vue
<template><div class="select"> <div class="wrap"> <selectInput></selectInput> <list></list> </div> </div> </template> <script> // 引入子組件 import selectInput from '@/components/selectInput' import list from '@/components/list' export default { components:{ //加載子組件 selectInput, list }, } </script> <style> .select{ background:#4a56fe; width: 400px; margin: 100px auto 0; padding: 40px; border-radius: 10px; } .wrap{ background: #e3e5fe; border-radius: 10px; padding: 40px; } ul{ list-style: none; } </style>
子組件 list.vue
<template><div class="list"> <ul> <li v-for="(item,index) in list" :key="index" v-show="initShow" @click="changeTitle(item.title)">{{item.title}}</li> </ul> </div> </template> <script> import {mapState,mapMutations} from 'vuex' // 將vuex中的state數據和mutations中的方法映射到組件中 export default { //vue 生命周期(created)在實例創建之后,在數據初始化之前被調用 created(){ this.$store.dispatch('getListAction') //調用vuex 中的 getListAction異步方法 }, //計算state數據 computed:{ ...mapState({ list:'list', initShow:'isShow' }) }, methods:{ changeTitle(title){ this.$store.commit('changeTitleMutation',title) this.$store.commit('toggleShow',!this.initShow) } } } </script> // 觸發異步里面的方法是用 this.$store.dispatch('這里是方法名') // 觸發同步里面的方法是用 this.$store.commit('這里是方法名') <style> .list{ padding: 10px 0; text-align: center; } li{ line-height: 30px; height: 30px; border-radius: 15px; cursor: pointer; color:#535353; } li:hover{ background: #ff705b; color: #fff; } </style>


子組件 selectinput.vue

<template><div class="inputBox"> <input type="text" readonly :value="getTitle" @click="toggleShow" placeholder="你喜歡什么"> </div> </template> <script> export default { computed:{ // 獲取vuex中的state數據并賦值綁定到 value上面 computed 里面的方法名其實就是相當于 data里面的數據,可以用this.getTitle 去訪問 getTitle(){ return this.$store.state.title }, // 初始化控制下拉選項顯示隱藏的狀態,如果isShow是false 則不限是下拉菜單,默認是false initShow(){ return this.$store.state.isShow } }, methods:{ //點擊input的時候調用該方法,這個方法去觸發mutations下面的toggleShow,去改變isShow的狀態,默認是isShow等于false, 然后在點擊的時候去改變isShow 等于true , !this.initShow就是true,如果是true的話,下拉選項才能出來,并將改變過后的值傳給toggleShow方法,去給vuex/store.js 里面的state.isShow賦值。 toggleShow(){ this.$store.commit('toggleShow',!this.initShow) } } } </script> <style> input{ outline: none; width: 100%; height: 40px; line-height: 40px; border-radius: 10px; border: 1px solid #d3d3d3; text-indent: 20px; color: #535353; } </style>















轉載于:https://www.cnblogs.com/zhouyideboke/p/11193600.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/247473.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/247473.shtml
英文地址,請注明出處:http://en.pswp.cn/news/247473.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

MAC 下配置JavaEE開發環境

1、安裝jdk&#xff0c;官網下載 路徑&#xff1a;http://www.oracle.com/technetwork/java/javase/downloads/index.html 選擇合適的版本下載即可。 2、配置Java環境變量 &#xff08;1&#xff09;commandspace 輸入termimal 打開終端 &#xff08;2&#xff09;在終端中輸…

微服務深入淺出(7)-- 網關路由Zuul

Zuul用于構建邊界服務&#xff0c;致力于動態路由&#xff0c;過濾&#xff0c;監控&#xff0c;彈性伸縮和安全等方向。 1、ZuulRibbonEureka結合&#xff0c;可以實現智能路由和負載均衡 2、網關將所有服務的API接口統一聚合統一暴露 3、網關統一爆率接口后&#xff0c;可以做…

判斷JavaScript對象為null或者屬性為空

首先說下null與undefined區別&#xff1a; 對已聲明但未初始化的和未聲明的變量執行typeof&#xff0c;都返回"undefined"。 null表示一個空對象指針&#xff0c;typeof操作會返回"object"。 一般不顯式的把變量的值設置為undefined&#xff0c;但null相…

font face如何導入自定義字體

首先&#xff0c;瀏覽器支持什么字體取決于用戶系統里安裝了什么字體&#xff0c;比如CSS中這么寫&#xff1a; font-family:"微軟雅黑","黑體","宋體"; 那么瀏覽器會嘗試按照從左到右的順序依次應用&#xff0c;假設用戶電腦上沒有安裝微軟雅黑…

Python中_,__,__xx__方法區別

_xx 單下劃線開頭 Python中沒有真正的私有屬性或方法,可以在你想聲明為私有的方法和屬性前加上單下劃線,以提示該屬性和方法不應在外部調用.如果真的調用了也不會出錯,但不符合規范. 方法就是以單下劃線開頭命名定義了&#xff0c;這種定義不會被*導入&#xff08;from module …

利用@media screen實現網頁布局的自適應

利用media screen實現網頁布局的自適應 優點:無需插件和手機主題,對移動設備友好,能夠適應各種窗口大小。只需在CSS中添加media screen屬性,根據瀏覽器寬度判斷并輸出不同的長寬值 1280分辨率以上&#xff08;大于1200px&#xff09; media screen and (min-width:1200px){#p…

C# webkit內核 網頁填表

比如我要操作的是下面的input 用到的方法是 調用如下&#xff1a; webkit.StringByEvaluatingJavaScriptFromString("document.getElementsByClassName(login_i_con_li_ipt name)[0].valueThis is a Demo."); 類似這種div在webkit中好像是無法通過常規方法模擬的 這時…

p字間距 html段落內文字設置字間距間隔

只對段落p內文字設置字間距&#xff0c;段落<p>是html段落標簽&#xff0c;以<p>開始&#xff0c;以</p>結束&#xff0c;通常文章分段使用p標簽&#xff0c;而有時小局部布局也可以使用p來布局。通過css設置其樣式實現排版目的。 這里針對p設置字間距&…

基本數據類型

上節回顧 1.循環打印數列1&#xff0c;3&#xff0c;5&#xff0c;.........&#xff0c;99 for i in range(100):if i%21:print (i) 2.turtle 庫 # penup 抬筆 # pendown 落筆 # pensize 畫筆大小 # pencolor 畫筆顏色## 畫筆運動函數 # fd 前進 # bk 后退 # goto 到達指定的坐…

修改系統默認 alert 彈框樣式

修改默認 alert 彈框&#xff0c;思路很簡單&#xff0c;定義一個 alert(e) 函數&#xff0c;加載最開頭即可。 css部分&#xff1a; <style>#msg{width:266px;position: fixed;z-index:999;top: 49%;margin-top:-80px;left:50%;margin-left:-133px;background:#fff;bo…

Code Review的重要性

這幾天一直在搞一家客戶的產品升級動作&#xff0c;數據的轉移已經完成大部分&#xff0c;因為升級主要的目標是處理性能問題&#xff0c;所以我針對性的對將要升級的版本進行了一些操作性能檢查&#xff0c;真是不做不知道&#xff0c;一做嚇一跳&#xff0c;有一個查詢選擇人…

Myeclipse快捷鍵總結大全

Myeclipse快捷鍵 Ctrl1 快速修復 CtrlD: 刪除當前行 CtrlQ 定位到最后編輯的地方 CtrlL 定位在某行 CtrlO 快速顯示 OutLine CtrlT 快速顯示當前類的繼承結構 CtrlW 關閉當前Editer CtrlK 快速定位到下一個 CtrlE 快速顯示當前Editer的下拉列表 CtrlJ 正向增量查找(按…

秋蟬鳴泣之時

奇怪的題目背景 所誤入的 是回憶的教室 所響起的 是通向絕望的計時器 所到達的 是開始的結束 你 能相信嗎? 題目背景 最近禮奈醬學會了線段樹和樹狀數組兩種數據結構 由于禮奈醬上課聽的很認真&#xff0c;所以她知道 樹狀數組常見的操作是 單點加區間求和 線段樹常見的操作是…

對淺拷貝與深拷貝的研究

淺拷貝只復制指向某個對象的指針&#xff0c;而不復制對象本身&#xff0c;新舊對象還是共享同一塊內存。 淺拷貝的實現方式 Object.assign()&#xff1a;需注意的是目標對象只有一層的時候&#xff0c;是深拷貝Array.prototype.concat()Array.prototype.slice()深拷貝就是在拷…

:nth-child(n)與:nth-of-type(n)為啥顯示不對呢

首先是二者的區別 :nth-child(n) 是選擇父元素的第n個子元素。 :nth-of-type(n) 是選擇父元素的第n個同類型的子元素 舉個例子&#xff1a; <div class"read"><h1>title</h1><p>paragraph1</p><p>paragraph2</p> <!…

css3 box-shadow陰影(內外陰影與發光)講解

基礎說明&#xff1a; 外陰影&#xff1a;box-shadow: X軸 Y軸 Rpx color; 屬性說明&#xff08;順序依次對應&#xff09;&#xff1a; 陰影的X軸(可以使用負值) 陰影的Y軸(可以使用負值) 陰影模糊值&#xff08;大小&#xff09; 陰影的顏色 內陰影&#xff1a;b…

Apress Pro Android 2

Apress Pro Android 2轉載于:https://www.cnblogs.com/gavinhughhu/archive/2010/03/21/1690792.html

Query意圖分析:記一次完整的機器學習過程(scikit learn library學習筆記)

所謂學習問題&#xff0c;是指觀察由n個樣本組成的集合&#xff0c;并根據這些數據來預測未知數據的性質。 學習任務&#xff08;一個二分類問題&#xff09;&#xff1a; 區分一個普通的互聯網檢索Query是否具有某個垂直領域的意圖。假設現在有一個O2O領域的垂直搜索引擎&…

使用 vue-cli 開發多頁應用

修改的webpack配置文件 全局配置 修改 webpack.base.conf.js 打開 ~\build\webpack.base.conf.js &#xff0c;找到entry&#xff0c;添加多入口 entry: {app: ./src/main.js,app2: ./src/main2.js,app3: ./src/main3.js, }, 運行、編譯的時候每一個入口都會對應一個Chunk …

深度學習系統相比較傳統的機器學習系統,針對常見的分類問題,精度究竟能有多大提升?...

來源&#xff1a;知乎原文鏈接&#xff1a;深度學習系統相比較傳統的機器學習系統&#xff0c;針對常見的分類問題&#xff0c;精度究竟能有多大提升&#xff1f; 問題&#xff1a; 我現在手頭有一個binary classification的問題。數據量在一百萬左右。每個sample都是一個14個f…