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

Posted

技术标签:

【中文标题】[Vue 警告]:属性或方法“hp”未在实例上定义,但在渲染期间引用【英文标题】:[Vue warn]: Property or method "hp" is not defined on the instance but referenced during render 【发布时间】:2020-06-22 21:06:11 【问题描述】:

我有以下代码:

var example1;
var hp = ["p"];

document.addEventListener("DOMContentLoaded", function(event) 
  hp = ["x"];
  example1 = new Vue(
    el: '#example-1', //yes i have an element with #example-1 (not relevant here)
    data: 
      iLoveMyself: window.hp
    ,

    watch: 
      iLoveMyself: 
        deep: true,
        immediate: true,
        handler (val, oldVal) 
          console.log("yeeeh")
        
      
    
  )
);

我尝试了很多东西(这就是为什么我的代码 ^ 如此丑陋)但我保留了这个 console.error:

vue.js:634 [Vue warn]: Property or method "hp" is not defined on the instance but referenced during render. Make sure that this property is reactive, either in the data option, or for class-based components, by initializing the property. See: https://vuejs.org/v2/guide/reactivity.html#Declaring-Reactive-Properties.

如果我在 VueJs 的 chrome 插件中查找值,数据集如下:

iLoveMyself:Array[1]
0:"x"

到目前为止一切都很好,但是当尝试更新 hp 时:

hp.push("y");
hp.pop();
hp = "ZEBRA";

我没有得到任何回应。

什么是我不明白的?

提前表示感谢!

编辑: 所以毕竟我开始收集碎片,我的html毕竟很重要:/

<div id="example-1">
  <div v-for="ev in hp" :key="ev.beavus">
     ev.beavus 
  </div>
</div>

【问题讨论】:

该错误表明您正在尝试在模板中使用名为hp 的属性。但是,您尚未在 Vue 实例上定义名为 hp 的属性。在示例代码中,您有一个名为iLoveMyself 的属性。您有一个名为hp 的变量,但在模板中无法访问它,即使它是全局变量。它必须是实例的属性,否则模板将无法看到它。 请分享模板 @skirtle 我很困惑,请给我一点时间 @BoussadjraBrahim 我进行了编辑 v-for="ev in hp" 引用 hp。您需要将其更改为 iLoveMyself 以匹配实例上的属性。要么将iLoveMyself重命名为hp 【参考方案1】:

这是您在问题中发布的更惯用的 Vue 实现:

new Vue(
  el: '#example-1',

  data: 
    iLoveMyself: [beavus: "x"]
  ,

  watch: 
    iLoveMyself: 
      deep: true,
      immediate: true,
      handler (val, oldVal) 
        console.log("yeeeh")
      
    
  ,
  
  methods: 
    add () 
      this.iLoveMyself.push(beavus: Math.random())
    
  
);
<script src="https://unpkg.com/vue@2.6.11/dist/vue.js"></script>

<div id="example-1">
  <div v-for="ev in iLoveMyself" :key="ev.beavus">
     ev.beavus 
  </div>
  <button @click="add">Add</button>
</div>
  

我已经摆脱了全局变量,现在只有一个名为 iLoveMyself 的实例属性来保存数组。将额外数据推送到数组会触发 watch 并使用新数据更新 DOM。

【讨论】:

【参考方案2】:

你应该这样做:

<div id="example-1">
  <div v-for="ev in iLoveMyself" :key="ev.beavus">
     ev.beavus 
  </div>
</div>

【讨论】:

是的,确实消除了错误,但在更新 var hp 时仍然没有响应 该属性不是响应式的,请准确说明您的用例,我们希望找到一种尊重 Vue 范式的方法 我认为使用可观察到的适合您的情况请查看这篇文章vuedose.tips/tips/creating-a-store-without-vuex-in-vue-js-2-6

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

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

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

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

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

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

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