在VUE3中从父方法调用子方法而不引用

hgqdbh6s  于 2022-12-14  发布在  Vue.js
关注(0)|答案(1)|浏览(195)

我正在尝试从父方法调用子方法。
我使用的库实际上不支持VUE 3。
它有VUE 3测试版,这意味着它不会完全支持VUE 3。
代码如下所示:

<grid-layout
          
          ref='gridlayout'
          v-model:layout="layout"
          :col-num="6"
          :row-height="70"
          :is-draggable="draggable"
          :preventCollision='true'
          :verticalCompact="false"
          :isResizable="false"
          :use-css-transforms="true"
          :maxRows='5'
     >

          <!-- can not use ref here -->
          <grid-item
            :key="item.key" v-for="item in layout"
            :x="item.x"
            :y="item.y"
            :w="item.w"
            :h="item.h"
            :i='item.i'
          >
            <span class="text">{{item.i}}</span>
          </grid-item>
        </grid-layout>

它不支持网格项上的引用,但我需要在其中声明的函数。
我试探着:

__vueParentComponent.proxy

但它不能在生产模式下工作。
是我修改源代码并在GitHub上打开请求的唯一方法吗?!
相关的问题很难搜索。希望有人能帮助我...
编辑:
抱歉,问题没有回答完。
这是我使用的图书馆。
https://jbaysolutions.github.io/vue-grid-layout/
我想动态抓取一个新的网格项到网格布局中。
库提供了从外部抓取的方式,但我面临的问题是“$children”在VUE 3中被删除了。
https://github.com/jbaysolutions/vue-grid-layout/blob/master/website/docs/.vuepress/components/Example10DragFromOutside.vue
有错误的代码库提供:

// get the grid-item
let el = this.$refs.gridlayout.$children[index];

// call grid-item function to calculate the new position
let new_pos = el.calcXY(mouseXY.y - parentRect.top, mouseXY.x - parentRect.left);

我把它编辑成:

var gridlayout = ref()
let el = gridlayout.value.$refs.item.children[index]
let new_pos = el.__vueParentComponent.proxy.calcXY(mouseXY.y - parentRect.top, mouseXY.x - parentRect.left)

它在生产模式下不起作用。
我得到错误:

TypeError: Cannot read properties of undefined (reading 'proxy')

有没有办法在没有ref的情况下替换“$children”?

hs1ihplo

hs1ihplo1#

我刚才也遇到了这个问题,我的解决方案是直接获取子组件

<grid-item
          ref="gridItemRef"
          v-for="item in layoutData"
          :x="item.x"
          :y="item.y"
          :w="item.w"
          :h="item.h"
          :i="item.i"
          :key="item.i"
          @resized="resizeEvent"
        >
          {{ item.i }}
        </grid-item>

gridItemRef.value[layoutData.value.length].$el.style.display = "none";
const el = gridItemRef.value[index];
el.calcXY(
      mouseXY.y - parentRect.top,
      mouseXY.x - parentRect.left
    );

相关问题