如何将对象处理程序传递给 vue 组件

Posted

技术标签:

【中文标题】如何将对象处理程序传递给 vue 组件【英文标题】:How to pass object handler into vue component 【发布时间】:2021-06-29 03:59:30 【问题描述】:

我想在 props 传递的处理程序中缓存状态。

问题是,模板渲染和文本内容变化很好,但控制台总是抛出错误:

[Vue 警告]:v-on 处理程序中的错误:“TypeError:无法读取未定义的属性 'apply'”

代码如下:

<template>
  <picker-box :options="item.options" @change="handlePickerChange($event, item)">
    <text> item.options[getPickerValue(item)].text </text>
  </picker-box>
</template>

<script>
  export default 
    props: 
      item: 
        type: Object,
        default() 
          return 
            options: [ text: 'op1' ,  text: 'op2' ],
            handler: 
              current: 0,
              get() 
                return this.current
              ,
              set(value) 
                this.current = value
              ,
            ,
            /* I also tried this: */
            // new (function () 
            //   this.current = 0
            //   this.get = () => 
            //     return this.current
            //   
            //   this.set = (value) => 
            //     this.current = value
            //   
            // )(),
          
        ,
      ,
    ,
    methods: 
      handlePickerChange(value, item) 
        item.handler.set(value)
      ,
      getPickerValue(item) 
        return item.handler.get()
      ,
    ,
  
</script>

我知道使用data() 或model prop 很容易,但我希望像handler.current 那样使用,换句话说,我只想知道为什么这个处理程序对象不正确(语法层),怎么能我修好了。

【问题讨论】:

【参考方案1】:

你到底想通过什么状态? 如果您需要跟踪静态属性,您可以使用客户端的本地存储,或为此使用观察者。 如果您需要保留更多动态数据,可以将其传递给计算属性,该属性会在每次更改时跟踪并设置它们。

【讨论】:

以上是关于如何将对象处理程序传递给 vue 组件的主要内容,如果未能解决你的问题,请参考以下文章

如何将参数传递给 Vue 组件以启动组件实例

如何将参数传递给Vue组件并在组件模板中重新使用其值

Vue 3 通过双向绑定将反应对象传递给组件

如何将参数传递给我的处理程序

如何将对象属性作为参数传递给 Razor 组件

如何将事件和其他参数传递给单击处理程序