【发布时间】:2018-07-29 01:05:41
【问题描述】:
我的应用使用以下类型的数据: 有些公司每个都有一个数据点列表。 每个数据点都有一个类型,每个公司只能有一个类型的数据点。
+Company_1
|
|--Datapoint_1 : type_1
|--Datapoint_2 : type_2
|--Datapoint_3 : type_3
|
|
+Company_2
|
|--Datapoint_4 : type_3
|--Datapoint_5 : type_2
|
|+Company_3
|
|--Datapoint_6 : type_2
...
...
总共有大约 1000 个数据点和 20 家公司。 该应用程序基于这些数据点计算分析,目标是允许用户操作这些数据点,以便查看给定场景中的结果。 在任何给定时刻,都有“selected_company”和“selected_type”,根据这两个选择,应该选择正确的数据点进行操作。
我意识到如果“公司”变量和“数据点”属性是数组,则必须对所有项目进行搜索才能找到正确的项目。 因此,我选择将它们设为对象:
companies = {
'1' : {
name : 'Company_1',
datapoints : {
'type_1' : { ... },
'type_2' : { ... },
'type_3' : { ... }
}
},
'2' : {...},
'3' : {...},
.
.
.
}
问题:
我有一个“数据点”组件,我将数据点作为道具传递:
<datum-comp :datum="companies[selected_company].datapoints[selected_type]"></datum-comp>
在这个组件中,我有一个用于操作数据点的 score 属性的输入:
<input v-model.number="datum.score" class="form-control">
但是,此输入表现出非常奇怪的行为。当我输入输入时,模型不会立即更新。相反,Vue 似乎在等待我从输入 (onBlur) 更改焦点,然后再更新模型。
更奇怪的是,当我将 datapoints 属性设为数组时
companies = {
'1' : {
name : 'Company_1',
datapoints : [
{ ... },
{ ... },
{ ... }
]
},
并使用一种方法来检索数据点(而不是直接传递它),Vue 以正确的方式运行!
<datum-comp :datum="getDatum(selected_company, selected_type)"></datum-comp>
(在 js 文件中:)
var app = new Vue({
el : '#app',
data:{...},
methods:{
getDatum: function(selected_company, selected_type){
var datum = this.companies[selected_company].datapoints.find(function(elem){
return elem.type == selected_type
})
return datun
}
}
})
我需要帮助来理解为什么 Vue 在这些情况下会这样,因为它对应用程序性能有一些严重的影响。 提前致谢。
【问题讨论】:
-
在同一浏览器中的 Vue.js 文档示例 vuejs.org/v2/guide/forms.html 中是否也会出现相同的行为?您可能想尝试
@input="",然后调用一个执行更新的函数。