Javascript Vue合成API:未从object.defineProperty创建的对象填充模板

Javascript Vue合成API:未从object.defineProperty创建的对象填充模板,javascript,vue.js,object,vue-component,vue-composition-api,Javascript,Vue.js,Object,Vue Component,Vue Composition Api,如果安装函数返回一个普通对象,例如{spec:{name:'BLAH'},Vue会按照预期将其应用于模板。没有火箭科学 但是,如果安装函数返回由object.defineProperty{},'spec',{value:{name:'BLAH'}}创建的对象,则Vue将完全忽略spec。具体错误消息是属性或方法spec未在实例上定义,而是在呈现期间引用 这是为什么?如何更改Object.defineProperty调用来修复此问题?将enumerable:true添加到选项中。如下所示:

如果安装函数返回一个普通对象,例如{spec:{name:'BLAH'},Vue会按照预期将其应用于模板。没有火箭科学

但是,如果安装函数返回由object.defineProperty{},'spec',{value:{name:'BLAH'}}创建的对象,则Vue将完全忽略spec。具体错误消息是属性或方法spec未在实例上定义,而是在呈现期间引用

这是为什么?如何更改Object.defineProperty调用来修复此问题?

将enumerable:true添加到选项中。如下所示:

    Object.defineProperty(this, 'spec', {
        value: { name: 'BLAH' },
        enumerable: true,
    });

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

{ 价值:{ 名字:'废话', }, 可枚举:false, 可写:false, 可配置:false } 但是该属性必须是可枚举的:对于反应性为true,这可能是因为代理无法正常使用它。因此,这是可行的:

Object.defineProperty{},'spec',{value:{name:'BLAH'},可枚举:true}