最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

vue elementui異步給dom賦值無(wú)效問(wèn)題

 更新時(shí)間:2024年06月07日 10:25:11   作者:空中湖  
這篇文章主要介紹了vue elementui異步給dom賦值無(wú)效問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

vue elementui異步給dom賦值無(wú)效

最近在研究el-admin,角色管理里面有個(gè)功能是點(diǎn)擊左側(cè)的表格里面的一個(gè)角色,右側(cè)的樹就會(huì)自動(dòng)初始化。

于是我在點(diǎn)擊的方法里面,去后臺(tái)異步調(diào)用了一下接口,然后返回?cái)?shù)據(jù)并把數(shù)據(jù)賦值給menuIds,但是我發(fā)現(xiàn)這個(gè)異步請(qǐng)求獲取到的數(shù)據(jù)壓根就不能讓樹控件刷新。

代碼如下:

我是在handleCurrentChange里面操作的,網(wǎng)上說(shuō)通過(guò)push方法能夠起作用,但是根本沒(méi)用,最后我的解決方法如下,先將ids都存儲(chǔ)起來(lái),然后再在nextTick方法里面去給menuIds賦值。

async initMenus(val) {
      this.menuIds = []
      const AV = window.AV
      const role = AV.Object.createWithoutData('Role', val.objectId);
      const roleMenuQuery = new AV.Query('RoleMenu');
      roleMenuQuery.equalTo("role", role)
      roleMenuQuery.include("menu")
      var roleMenus = await roleMenuQuery.find()
      var ids = [];
      roleMenus.forEach(roleMenu => {
        var roleMenuJson = roleMenu.toJSON()
        ids.push(roleMenuJson.menu.menuId)
      })
      this.$nextTick(() => {
        this.menuIds = ids;
      })
      // https://blog.csdn.net/xudalin/article/details/103158941
      // 這個(gè)代碼解決了樹控件的半選問(wèn)題。參考鏈接如上
      /*ids.forEach((i, n) => {
        var node = this.$refs.menu.getNode(i);
        console.log(node.isLeaf)
        if (node.isLeaf) {
          this.$refs.menu.setChecked(node, true);
        }
      });*/
    },
    // 觸發(fā)單選
    handleCurrentChange(val) {
      console.log("handleCurrentChange")
      if (val) {
        const _this = this
        // 清空菜單的選中
        this.$refs.menu.setCheckedKeys([])
        // 保存當(dāng)前的角色id
        this.currentId = val.id
        // this.showButton = this.level <= val.level
        // 初始化
        this.initMenus(val)
        // 菜單數(shù)據(jù)需要特殊處理
        /*val.menus.forEach(function (data, index) {
          _this.menuIds.push(data.id)
        })*/
      }
    },

vue elementui前端異步方法轉(zhuǎn)同步

elementui的表單驗(yàn)證功能

表單驗(yàn)證方法如果傳入回調(diào)函數(shù)時(shí)是異步的

// 子組件的方法
validateForm(){
      this.$refs.jsonEditor.getRef("form").validate((valid, hints) => {
        return {valid: valid, hints: hints}
      })
}
 
// 父組件調(diào)用,會(huì)發(fā)現(xiàn)校驗(yàn)結(jié)果,hints為undefine
submitAll(){
      this.$refs.resourceEditorRef.forEach((item, index) => {
        console.log(item.validateForm())
      })
}

修改成同步的

// 子組件方法
validateForm(){
      // this.$refs.jsonEditor.getRef("form").validate((valid, hints) => {
      //   return {valid: valid, hints: hints}
      // })
      // return new Promise((resolve, reject) => {
      //   this.$refs.jsonEditor.getRef("form").validate((valid, hints) => {
      //     resolve({valid, hints})
      //   })
      // })
      //或者根據(jù)官網(wǎng)文檔說(shuō)明可以不傳入回調(diào)函數(shù),直接validate
      return this.$refs.jsonEditor.getRef("form").validate
    },
 
// 父組件調(diào)用
submitAll(){
      // this.$refs.resourceEditorRef.forEach((item, index) => {
      //   console.log("校驗(yàn)結(jié)果", item.validateForm())
      // })
      this.$refs.resourceEditorRef.forEach(async (item, index) => {
        let {valid, hints} = await item.validateForm()
        console.info(valid, hints)
        console.log("校驗(yàn)結(jié)果", hints)
      })
}

但是其實(shí)上面 submitAll 的 forEach 是有問(wèn)題, 需要改成傳統(tǒng)的for遍歷, 因?yàn)?forEach 的入?yún)⑹且粋€(gè)回調(diào)函數(shù) , 簡(jiǎn)單的說(shuō)就是執(zhí)行 forEach 后會(huì)馬上執(zhí)行forEach后面的代碼

所以修改成普通的for , 使用普通 for 循環(huán)的時(shí)候有需要多包一層

// 子組件方法
validateForm(){
      //或者根據(jù)官網(wǎng)文檔說(shuō)明可以不傳入回調(diào)函數(shù),直接validate
      return this.$refs.jsonEditor.getRef("form").validate
    }
 
//父組件調(diào)用
submitAll(){
      (async () => {
        let submitAllForm = {};
        for (let index = 0; index < this.$refs.resourceEditorRef.length; index++) {
          const item = this.$refs.resourceEditorRef[index]
          await item.validateForm().then(res => {
            console.log("表單校驗(yàn)",res)
          }).catch(res => {
            console.log("表單校驗(yàn)catch",res)
            if(res == false){
              this.$message({ type: "error", message: "表單校驗(yàn)失敗" });
              // 有一個(gè)校驗(yàn)失敗則直接返回
              return;
            }
          })
        }
        //后續(xù)操作
        
      })()
}

或者

// 子組件方法
validateForm(){
      return new Promise((resolve, reject) => {
        this.$refs.jsonEditor.getRef("form").validate((valid, hints) => {
          resolve({valid, hints})
        })
      })
}
 
// 父調(diào)用
submitAll(){
      (async () => {
        let submitAllForm = {};
        for (let index = 0; index < this.$refs.resourceEditorRef.length; index++) {
          const item = this.$refs.resourceEditorRef[index]
          let {valid, hints} = await item.validateForm();
          console.log("表單校驗(yàn)valid",valid)
          console.log("表單校驗(yàn)hints",hints)
          debugger
        }
        //后續(xù)操作
        debugger
      })()
}

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 如何利用Vue3管理系統(tǒng)實(shí)現(xiàn)動(dòng)態(tài)路由和動(dòng)態(tài)側(cè)邊菜單欄

    如何利用Vue3管理系統(tǒng)實(shí)現(xiàn)動(dòng)態(tài)路由和動(dòng)態(tài)側(cè)邊菜單欄

    通常我們?cè)趘ue項(xiàng)目中都是前端配置好路由的,但在一些項(xiàng)目中我們可能會(huì)遇到權(quán)限控制,這樣我們就涉及到動(dòng)態(tài)路由的設(shè)置了,下面這篇文章主要給大家介紹了關(guān)于如何利用Vue3管理系統(tǒng)實(shí)現(xiàn)動(dòng)態(tài)路由和動(dòng)態(tài)側(cè)邊菜單欄的相關(guān)資料,需要的朋友可以參考下
    2022-02-02
  • vue2從數(shù)據(jù)到視圖渲染之模板渲染詳解

    vue2從數(shù)據(jù)到視圖渲染之模板渲染詳解

    這篇文章主要為大家介紹了vue2從數(shù)據(jù)到視圖渲染之模板渲染詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • vue實(shí)現(xiàn)div單選多選功能

    vue實(shí)現(xiàn)div單選多選功能

    這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)div單選多選功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-07-07
  • vue proxyTable 接口跨域請(qǐng)求調(diào)試的示例

    vue proxyTable 接口跨域請(qǐng)求調(diào)試的示例

    本篇文章主要介紹了vue proxyTable 接口跨域請(qǐng)求調(diào)試的示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-09-09
  • vue-router路由傳參的兩種方式詳解(params和query)

    vue-router路由傳參的兩種方式詳解(params和query)

    vue-router 是一個(gè)基于vue.js的路由器,它提供了強(qiáng)大的路由功能,能夠幫助開發(fā)者快速構(gòu)建單頁(yè)應(yīng)用程序,本文將詳細(xì)介紹 vue-router 路由傳參的方法,包括路由傳參的概念、路由傳參的方法、路由傳參的應(yīng)用場(chǎng)景等,需要的朋友可以參考下
    2024-12-12
  • Vue中如何避免props驗(yàn)證失敗問(wèn)題

    Vue中如何避免props驗(yàn)證失敗問(wèn)題

    本文將探討 props 驗(yàn)證失敗的常見(jiàn)原因,并提供解決方法,幫助開發(fā)者在 Vue 組件開發(fā)中避免這些問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-03-03
  • 帶你一文了解Vue生命周期鉤子

    帶你一文了解Vue生命周期鉤子

    生命周期鉤子又被叫做生命周期時(shí)間,生命周期函數(shù),生命周期鉤子就是vue生命周期中出發(fā)的各類事件,這些事件被稱為生命周期鉤子,下面這篇文章主要給大家介紹了關(guān)于Vue生命周期鉤子的相關(guān)資料,需要的朋友可以參考下
    2022-06-06
  • 解決vue3打包過(guò)后空白頁(yè)面的情況

    解決vue3打包過(guò)后空白頁(yè)面的情況

    這篇文章主要介紹了解決vue3打包過(guò)后空白頁(yè)面的情況,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • vue業(yè)務(wù)實(shí)例之組件遞歸及其應(yīng)用

    vue業(yè)務(wù)實(shí)例之組件遞歸及其應(yīng)用

    目中出現(xiàn)多級(jí)菜單時(shí),需要多層for循環(huán)時(shí),但是當(dāng)菜單增加層級(jí)時(shí),需要在頁(yè)面結(jié)構(gòu)中增加一層for循環(huán),這時(shí)我們可以使用組件遞歸的思想來(lái)實(shí)現(xiàn),下面這篇文章主要給大家介紹了關(guān)于vue業(yè)務(wù)實(shí)例之組件遞歸及其應(yīng)用的相關(guān)資料,需要的朋友可以參考下
    2022-05-05
  • 淺談Vue初學(xué)之props的駝峰命名

    淺談Vue初學(xué)之props的駝峰命名

    這篇文章主要介紹了淺談Vue初學(xué)之props的駝峰命名,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-07-07

最新評(píng)論

瑞金市| 北宁市| 三原县| 郑州市| 蒙山县| 云阳县| 无为县| 唐山市| 阳山县| 玉田县| 中牟县| 玛多县| 亚东县| 新绛县| 汝城县| 贡山| 利川市| 手机| 青浦区| 东兴市| 景谷| 丽水市| 资兴市| 达孜县| 土默特左旗| 宁津县| 长宁县| 波密县| 新巴尔虎左旗| 渝中区| 农安县| 弋阳县| 德庆县| 项城市| 汝南县| 巩义市| 德清县| 寿宁县| 淮北市| 瑞昌市| 伊春市|