Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vue.js/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 用于分析/格式化数据的Vue.js计算属性_Javascript_Vue.js - Fatal编程技术网

Javascript 用于分析/格式化数据的Vue.js计算属性

Javascript 用于分析/格式化数据的Vue.js计算属性,javascript,vue.js,Javascript,Vue.js,我正在尝试获取Vue.js computed属性来重新配置数据,当我在computed属性中执行此操作时,会得到一个关于副作用的错误。我在这里查了一下,发现使用方法是正确的方法。现在,当尝试使用某个方法时,会在控制台中显示错误消息,说明无法从selectedBuilding读取“units”的属性 我想弄清楚的是如何使用它,以便根据计算出的返回值使用正确的数据填充units数组 下面是我的Vue.js文件的脚本部分的精简代码 export default { name: "Form

我正在尝试获取Vue.js computed属性来重新配置数据,当我在computed属性中执行此操作时,会得到一个关于副作用的错误。我在这里查了一下,发现使用方法是正确的方法。现在,当尝试使用某个方法时,会在控制台中显示错误消息,说明无法从selectedBuilding读取“units”的属性

我想弄清楚的是如何使用它,以便根据计算出的返回值使用正确的数据填充units数组

下面是我的Vue.js文件的脚本部分的精简代码

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