2016-11-10 76 views
1

我将通过API调用修改我的Vue实例中的很多变量。他们的初始价值并不重要。是否有可能丢弃Vue实例中的数据错误?

我希望会有办法在VM的实例来定义它们,但是,这并不工作:

vm = new Vue({ 
 
    el: "#app", 
 
    data: {} 
 
}); 
 
vm.number = 3
<div id="app"> 
 
    {{ number }} 
 
</div>

如果我通过data: { number: null }替换data: {}代码运行良好。

我想避免的是有一些这样的声明 - 有没有办法在实例化时声明data变量?

+0

引用怎么样'数据中的所有数据: {container:{number:null,...}}'?因为你知道上下文,我相信你可以为'container'提出一个更好的名字。 – gskema

回答

1

不是。

docs解释如何反应作品Vue公司如下:

当你传递一个普通的JavaScript对象到Vue的实例作为其数据 选项,Vue公司将走过它的所有属性,并将其转换 getter/setter使用Object.defineProperty。

...

吸气/ setter方法是对用户不可见,但在引擎盖下它们 使Vue的执行依赖性跟踪和改变通知时 属性被访问或修改。

...

由于现代的JavaScript(和 Object.observe的遗弃)的局限性,Vue公司无法检测属性添加或删除。

所以基本上以纯而言,为了使数据值是反应性,因而被更新时,您的API调用返回时,属性必须是从实例化时存在的,因为Vue公司无法检测addions或缺失

也就是说,您可以按照@gskema的建议使用占位符对象并将您的属性附加到该对象。这些变化确实会被Vue收回。

所以,你可以这样做:

data: { 
    api: null 
} 

,然后附上您的API值到api属性时返回他们,最后只是api.number

+0

谢谢。我使用组件,所以解决方案有一个“容器化”的变量集是我将要做的 - 如果没有办法避免声明变量。你的回答很清楚,这是不可能的。 – WoJ

相关问题