Javascript 用于分析/格式化数据的Vue.js计算属性
我正在尝试获取Vue.js computed属性来重新配置数据,当我在computed属性中执行此操作时,会得到一个关于副作用的错误。我在这里查了一下,发现使用方法是正确的方法。现在,当尝试使用某个方法时,会在控制台中显示错误消息,说明无法从selectedBuilding读取“units”的属性 我想弄清楚的是如何使用它,以便根据计算出的返回值使用正确的数据填充units数组 下面是我的Vue.js文件的脚本部分的精简代码Javascript 用于分析/格式化数据的Vue.js计算属性,javascript,vue.js,Javascript,Vue.js,我正在尝试获取Vue.js computed属性来重新配置数据,当我在computed属性中执行此操作时,会得到一个关于副作用的错误。我在这里查了一下,发现使用方法是正确的方法。现在,当尝试使用某个方法时,会在控制台中显示错误消息,说明无法从selectedBuilding读取“units”的属性 我想弄清楚的是如何使用它,以便根据计算出的返回值使用正确的数据填充units数组 下面是我的Vue.js文件的脚本部分的精简代码 export default { name: "Form
export default {
name: "Form",
data: () => ({
building: {},
buildings: [
{
"units": [ // Bunch of data in here that isn't important//],
"buildingID": "<an ID according to a custom format>",
}],
units: [],
}),
methods: {
formatUnits: function(selectedBuildingID) {
let selectedBuilding = this.buildings.find(building => building.buildingID === selectedBuildingID)
this.units = selectedBuilding.units
return true
}
},
computed: {
useExistingBuilding() {
if(this.building === 'New') {return true}
else {
this.formatUnits(this.building)
return false
}
},
}
};
</script>
由于
此.building
没有buildingID
(因此,未定义的),并且buildingID
中没有未定义的项作为buildingID
的值,因此失败
这是因为当条件不能满足时,find方法将返回undefined
find()方法返回所提供数组中满足所提供测试函数的第一个元素的值。如果没有值满足测试函数,则返回undefined
在computed属性中,您传递的是整个建筑,而不是id,而在方法(在find
中)中,您比较的是id
您需要将建筑id传递给您的方法
另外,在数据中
将建筑
声明为对象,然后在计算属性中,声明建筑
是否等于新建
,这是一个字符串
我建议您要做的第一件事是重新考虑您的数据类型以及模板、计算属性、方法和数据之间的数据流。您确定this.building.find
中的find
确实返回了有效值吗?可能不是这样exists@DanielRodríguezma是的,100%确定它返回了一些东西。我可以在使用计算值时控制台记录值,它工作得非常好,除了副作用错误。我不认为你是对的,我可能把数据裁剪错了,但它100%有buildingID。我可以控制台。记录它并查看它。好吧,抱歉,它的ID不在建筑物中你能给我们看一下(即更新问题)你的示例数据吗?有效的一个?很好地抓住了数据类型混合匹配,我不认为这是实际问题,因为eval似乎工作正常,我在模板中有一个v-select,它将building设置为字符串“New”或对象。将buildingID添加到调用该方法的位置似乎解决了控制台问题,并允许我呈现页面。仍然没有按我希望的那样工作,但正在进步。我标记为解决得太快,它发送的数据未定义。当我console.log(this.building)
时,它会给出建筑ID,因为这是我的select返回的。我做了两次console.log以查看返回的内容selectedBuildingID
返回的ID<代码>selectedBuilding
正在返回一个正常的对象。但是,当我执行selectedBuilding.units
时,它会说它找不到未定义的单位。如果selectedBuilding未定义,则表示find方法不起作用,这意味着您在find中检查的数据与您认为的不同。。。。尝试在find方法之前记录this.buildingd
和selectedBuildingID
,查看它们所包含的内容
TypeError: Cannot read property 'units' of undefined