Vue警告:属性或方法“item”未在实例上定义,但在渲染期间被引用

Posted

技术标签:

【中文标题】Vue警告:属性或方法“item”未在实例上定义,但在渲染期间被引用【英文标题】:Vue warn: Property or method "item" is not defined on the instance but referenced during render 【发布时间】:2021-02-10 16:13:31 【问题描述】:

我在迭代 CartItem 时遇到错误。

属性或方法“item”是 未在实例上定义,但在渲染期间引用。通过初始化属性,确保此属性是反应性的,无论是在数据选项中,还是对于基于类的组件

为什么会出现这个错误,我该如何解决。 [注意:这是一个nativescript vue项目]

<ListView      
      v-for="(item, index) in cartItems"  
      :key="index"                
      
      class="listCard"
    >
      <v-template>
        <GridLayout
          rows="auto"
          columns="auto,*3,auto"
          backgroundColor="white"
          class="innerList"
        >
          <StackLayout orientation="horizontal" col="0" row="0">                
            <Button>
              <FormattedString>
                <Label
                  class="fa fas"
                  :text="'fa-trash' | fonticon"
                  fontSize="30"                                            
                ></Label>
              </FormattedString>
            </Button>
            <Image :src="item.imageUrl"  ></Image>
          </StackLayout>

          <StackLayout col="1" row="0">
            <Label
              :text="item.title"
              textWrap="true"
              class="font-weight-bold"
              color="#333333"
            ></Label>
            <Label :text="item.color" color="#999999"></Label>
            <Label :text="'USD ' + item.price" color="red"></Label>
          </StackLayout>

          <StackLayout orientation="horizontal" col="2" row="0">
            <Button
              text="-"
              @tap="onDecriment(index)"
              class="operatorButton operatorBox"
              marginRight="0"
            />
            <Label 
              class="operatorLabel operatorBox" 
              :text="item.quantity">
            </Label>
            <Button
              text="+"
              @tap="onIncrement(index)"
              class="operatorButton operatorBox"
              marginLeft="0"
            />
          </StackLayout>
        </GridLayout>
      </v-template>
    </ListView>

【问题讨论】:

【参考方案1】:

我在您的代码中没有看到任何错误,但您可以尝试使用for 代替v-for。我在this example 中看到,Listview 正在与for 一起使用。

根据文档:If a v-for is used on a &lt;ListView&gt; a warning will be printed to the console, and it will be converted to the **for** property. 您可以使用here 阅读有关Listview 的更多信息

<ListView      
      for="(item, index) in cartItems"  
      :key="index"                
      
      class="listCard"
    >
....

【讨论】:

以上是关于Vue警告:属性或方法“item”未在实例上定义,但在渲染期间被引用的主要内容,如果未能解决你的问题,请参考以下文章

“属性或方法未在实例上定义,但在渲染期间引用”

Vue警告]:属性或方法“选项”未在实例上定义,但在render.Vue js问题期间引用

为啥我看到 Vue 警告:“属性或方法“msg”未在实例上定义,但在渲染期间被引用...”

[Vue 警告]:属性或方法“游戏”未在实例上定义,但在渲染期间引用

[Vue 警告]:属性或方法未在实例上定义,但在渲染期间引用

[Vue 警告]:属性或方法“hp”未在实例上定义,但在渲染期间引用