【问题标题】:VueJS 2 component prop inconsistency when using expressions使用表达式时VueJS 2组件道具不一致
【发布时间】:2017-01-24 02:30:35
【问题描述】:

我正在努力将一条信息传递到我的一个组件中。

我正在尝试遍历数据列表,并为列表的最后一项传入一个设置为 true 的布尔值。我遇到了一个有趣的不一致,如果我在下面的代码中使用v-bind:isLast="index + 1 == tiers.length",它的计算结果为false,但如果我使用v-bind:test="{index: index, tiersLength: tiers.length, bool: index + 1 == tiers.length}"并使用一个对象来存储该信息而不是期望一个布尔值,则布尔键的值为对象内为真。

有人知道这是为什么吗?而且,这作为计算属性会更好吗?我真的不想将层列表中的更多信息传递到组件中,因为我觉得该组件应该完全忽略层列表。

<section id="classification-metadata-editor">
  <metadata-button-row
    v-for="(row,index) in tiers"
    v-bind:row="row"
    v-bind:index="index"
    v-bind:isLast="index + 1 == tiers.length"
    v-bind:test="{index: index, tiersLength: tiers.length, bool: index + 1 == tiers.length}">
  </metadata-button-row>
</section>

isLast: false
test: {index: 0, tiersLength: 1, bool: true}

我不太确定这是否是有意的,因为我觉得我做的比设置道具的目的要多一些,但我不太确定该怎么做。我一直在寻找类似的问题,但不太确定搜索的正确术语,所以如果在其他地方有所涉及,我深表歉意。

谢谢!

【问题讨论】:

  • 好吧.. 经过数小时的有趣故障排除后,看起来调用变量 isLast 实际上是问题所在。将该变量调用更改为在绑定和组件中进行测试,布尔值开始按预期计算为真。有趣的。似乎大写字母正在抛弃我的代码。不知道为什么。相同的代码,但将变量名替换为 isLast、lastInArray、arrayLast 都返回为 false,但将其命名为 testing、is_last、last_in_array,均评估为 true。

标签: vuejs2 vue-component


【解决方案1】:

您不能像这样将对象分配给道具:

v-bind:test="{index: index, tiersLength: tiers.length, bool: index + 1 == tiers.length}">

您必须创建一个计算属性或方法来获取此对象,如下所示:

methods: {
  getObject (index) {
  return {index: index, tiersLength: this.tiers.length, bool: index + 1 == this.tiers.length}
  }
}

并在模板中使用此方法:

v-bind:test="getObject(index)"

【讨论】:

  • 我更新了我的代码以反映该建议,但它似乎仍然在我期望为真的地方返回假。以下是更新:v-bind:isLast="isLast(index)" 已添加到父级:methods: { isLast: function(index) { return Boolean(index + 1 === this.tiers.length) } 我也尝试过没有布尔值.. 仍然是错误的。我也不太清楚你的意思是你不能绑定这样的对象。我确实用上面的代码完成了它。也许这种做法是不可取的?还是非反应性的,所以我们不使用它?欢迎进一步解释
  • 我弄清楚了我的代码发生了什么。非常感谢您为更好地组织我的代码提供帮助和建议@Saurabh。将您的回答标记为所提供的附加信息的答案。 :)
猜你喜欢
  • 1970-01-01
  • 2021-08-15
  • 1970-01-01
  • 2018-12-11
  • 2019-06-07
  • 1970-01-01
  • 2018-05-10
  • 2021-05-10
  • 1970-01-01
相关资源
最近更新 更多