为啥我不能使用常量而不是 this.item.number?

Posted

技术标签:

【中文标题】为啥我不能使用常量而不是 this.item.number?【英文标题】:Why can't I use constant number instead of this.item.number?为什么我不能使用常量而不是 this.item.number? 【发布时间】:2020-05-17 19:45:18 【问题描述】:

<template>
    <Page>
        <ActionBar title="item" />
        <ScrollView>
            <StackLayout>
                <Label textWrap="true" v-for="n in times" :text="n" />
            </StackLayout>
        </ScrollView>
    </Page>
</template>

<script>
    export default 
        props: ["item"],
        data() 
            return 
                times: this.item.subTotal - this.item.subtrackfromTotal // OK
                // times: 9 - 5, // OK
                // times: this.item.subTotal - 5 //error: INVALID ARRAY LENGTH
            ;
        
    ;
</script>

我想从(我的数据的数字字段)中减去 5 并 => 在v-for="n in times" 中使用它 但是当我使用一个常量比如 5 时,它会给出一个 INVALID ARRAY LENGTH 错误。

为什么times: this.item.subTotal - 5 会失败?

请帮我弄清楚;如何对我的数据和常数使用运算符,同时让 vue 相信我发送的是常数而不是数组?

当我尝试times: this.item.subTotal - this.item.subtrackfromTotaltimes: 9 - 5Vue 时,将时间作为常数。 但是当我尝试times: this.item.subTotal - 5 时,它给出了 INVALID ARRAY LENGTH 错误。

感谢您提前回复。


请在 N 个 Playground 中检查代码

Playground of "modify counts (item.number - 5)"

【问题讨论】:

times: (this.item.subTotal &gt;= 0)? this.item.subTotal - 5 : this.item.subTotal 【参考方案1】:

您收到该错误是因为该值为负数。

对于您的其中一项,this.item.subTotal 的值为 4,因此times 为 -1。

new Vue(
  el: '#app',
  
  data () 
    return 
      times: -1
    
  
)
<script src="https://unpkg.com/vue@2.6.11/dist/vue.js"></script>

<div id="app">
  <div v-for="a in times"></div>
</div>

您如何修复它取决于您希望在这种情况下的行为。也许是这个?

times: Math.max(0, this.item.subTotal - 5)

【讨论】:

非常感谢。这是一种通过在文档中搜索很难找到的答案。

以上是关于为啥我不能使用常量而不是 this.item.number?的主要内容,如果未能解决你的问题,请参考以下文章

为啥在 C for 循环的条件中使用表达式而不是常量?

const常量不能被修改,为啥编译还能通过?

为啥我不能使用数组的枚举器,而不是自己实现呢?

为啥使用十六进制常量?

为啥我不能在 switch 语句中使用元组常量作为案例

为啥我们不能使用 RuntimeException 而不是创建自定义异常? [复制]