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

Posted

技术标签:

【中文标题】Vue.js - 属性或方法“blah”未在实例上定义,但在渲染期间引用【英文标题】:Vue.js - Property or method "blah" is not defined on the instance but referenced during render 【发布时间】:2018-08-26 20:58:24 【问题描述】:

为什么Vue 2在父模板中静态定义的时候会抛出一个prop没有定义的错误?

注意:如果我将 javascript 带入 .vue 文件的脚本标签而不是导入它,则不会引发此错误。

错误:

“嵌入”的属性或方法未在实例上定义,而是在渲染期间引用。通过初始化该属性,确保此属性在数据选项或基于类的组件中是反应性的。见https://vuejs.org/v2/guide/reactivity.html#Declaring-Reactive-Properties。

loader.html

<div class="overlay">
  <div class="loader" v-bind:class=" embedded ">
    <div class="loader__items">
      <div class="loader__item"></div>
      <div class="loader__item"></div>
      <div class="loader__item"></div>
      <div class="loader__item"></div>
      <div class="loader__item"></div>
    </div>
  </div>
</div>

loader.js

export default 
  props: 
    embedded: 
      default: false,
      type: Boolean,
    ,
  ,
;

loader.vue

<template src="./loader.html"/>
<script scr="./loader.js" lang="babel"></script>
<style src="./loader.scss" lang="scss" scoped/>

client.js

import Loader from '../../loader/loader.vue';

components: 
   Loader

client.html

<loader :embedded="true" />

【问题讨论】:

究竟是什么错误?你如何将loader 导入client.js @Phil -> 已编辑 我尝试在data 属性中声明它,但错误完全相同:( 您的代码在没有警告的情况下运行:jsfiddle.net/quv49nwa 这可能与 vue 共享组件范围的方式有关...如果我将它放在脚本标签中,那么它是组件的新实例,它是每次导入 .vue 文件的范围?与如果我导入然后所有组件共享模块系统中的实例相反?我对 Vue 非常陌生,所以与 Redux 应用程序相比,这些位如何工作我仍然有点模糊。 【参考方案1】:

假设:

.vue 文件的标记中使用src="./loader.js" 导入loader.js 文件时,会引发初始问题中的错误。组件对象的这个实例可能在加载器组件的每个实例之间共享,其中一些具有传入的 embedded 属性,而另一些则没有。这可能会打开对&lt;loader /&gt; 构造函数的其他调用的大门,而不是在实例化时写入道具的值。

解决方案:

切换到脚本标签内的导入和导出修复错误:

loader.vue

<template src="./loader.html" />
<script lang="babel">
    import loader from './loader';

    export default loader;
</script>
<style src="./loader.scss" lang="scss" scoped />

【讨论】:

很好的调试。是什么促使您将templatescriptstyle 移动到外部文件?有点违背单文件组件的“单文件”方面 @Phil 我只是不完全迷恋 Vue TBH 中的单文件组件。我更喜欢清晰地分离关注点,尽管我很乐意在 .js 文件中使用 JSX,但不幸的是,我正在处理的项目并不是这样编写的。另一方面,我喜欢将 CSS 放在单独的文件中。我想是个人喜好。

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

Vue.js:属性或方法未在实例上定义,但在渲染期间引用

Vue js错误:属性或方法“smoothie”未在实例上定义,但在渲染期间引用

如何解决 Vue.js 中的“属性或方法未在实例上定义但在渲染期间引用..”?

Vue.js 属性或方法“选项”未在实例上定义,但在渲染期间被引用

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

错误:vue.js:634 [Vue 警告]:属性或方法“项目”未在实例上定义,但在渲染期间被引用