代码之家  ›  专栏  ›  技术社区  ›  Jay Bienvenu

Vue合成API:未从对象创建的对象填充模板。定义属性

  •  0
  • Jay Bienvenu  · 技术社区  · 5 年前

    如果你的 setup() 例如,函数返回一个普通对象 { spec: { name: 'BLAH' } ,Vue会尽职尽责地将其应用于模板。那里没有火箭科学。

    然而,如果你的 设置() 函数返回由创建的对象 Object.defineProperty({}, 'spec', { value: { name: 'BLAH' }}) ,Vue忽略 spec 彻底地(具体错误信息如下所示: Property or method "spec" is not defined on the instance but referenced during render. ).

    为什么会这样?人们如何改变 Object.defineProperty 打电话来修吗?

    2 回复  |  直到 5 年前
        1
  •  1
  •   Jay Bienvenu    5 年前

    添加 enumerable: true 选择。就像这样:

        Object.defineProperty(this, 'spec', {
            value: { name: 'BLAH' },
            enumerable: true,
        });
    
        2
  •  0
  •   Dan    5 年前

    使用创建属性时 Object.defineProperty 并且不在属性描述符中指定值,它们通常默认为 false .换句话说,它基本上与:

    {
      value: {
         name: 'BLAH',
      },
      enumerable: false,
      writable: false,
      configurable: false
    }
    

    但财产必须是 enumerable: true 对于反应性,可能是因为代理无法正常工作。所以这是可行的:

    Object.defineProperty({}, 'spec', { value: { name: 'BLAH' }, enumerable: true })
    
    推荐文章