![](/img/trans.png)
[英]VueJS: Property or method ... is not defined on the instance but referenced during render
[英]Vuejs Property or method is not defined on the instance but referenced during render
我是VueJS的新手,正在尝试创建自定义表单组件。
我正在使用http://element.eleme.io元素。 所以我创建了一个新的Form.vue文件
<template>
<el-form :model="data">
<slot></slot>
</el-form>
</template>
<script>
import { FormItem, Input } from 'element-ui';
export default {
name: 'general-form',
components: {
FormItem,
Input
},
props: ['data'],
mounted: function() {
console.log(this.data);
}
}
</script>
这是我的app.js
// Element.io
import { Form, FormItem, Input } from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';
// Custom
import GeneralForm from '../../components/presentational-subsystem/form/Form.vue';
Vue.use(Form);
Vue.use(FormItem);
Vue.use(Input);
Vue.config.devtools = true;
var contactsPage = new Vue({
el: '#contacts-page',
components: {
GeneralForm
}
});
这是我的看法:
<div id="contacts-page">
<general-form id="contacts-form" :data="{subject: 'abc'}" action="/contacts" method="post">
<el-form-item label="Subject" prop="subject">
<el-input v-model="data.subject"></el-input>
</el-form-item>
</general-form>
</div>
但是我在控制台中收到此错误:
[警告]:属性或方法“ formData”未在实例上定义,但在渲染期间被引用。 通过初始化属性,确保在data选项中或对于基于类的组件,此属性都是反应性的。
我知道如果我将Vue对象更改为此:
var contactsPage = new Vue({
el: '#contacts-page',
data: { formData: {} }
components: {
GeneralForm
}
});
错误消失了,但是表格不再起作用了。 我尝试遵循以下示例:
http://element.eleme.io/#/zh-CN/component/form
和我的标记实际上是相同的,但是当我使用Vue开发工具时,我可以看到Form.vue组件内的formData变量与Vue实例中的共享formData变量不同。
我的问题是如何使<el>
元素使用我创建的Form组件中的formData?
当您使用slot
,其范围(数据的来源)是父级。 插槽的内容引用formData
,它是在子级中定义的。 您可以使用范围限定的插槽将子数据传递到插槽
或者,您可以在父formData
中完全定义formData
并将其作为prop
传递给子级,然后将其作为道具传递给el-form
。
这个结构:
<el-form :model="formData">
<slot></slot>
</el-form>
您是否将formData
从Form
组件传递到el-form
组件 。 它不会传递到插槽。 插槽不是子代,它们是从父代注入的代码。
父代码:
<general-form id="contacts-form" action="/contacts" method="post">
<el-form-item label="Subject" prop="subject">
<el-input v-model="formData.subject"></el-input>
</el-form-item>
</general-form>
正在创建您的Form
组件的实例,并将el-form-item
作为插槽内容注入。 您得到的错误是在该插槽内容中引用formData
,因为插槽的上下文是父级。 插槽对注入的内容一无所知(除非您使用作用域插槽)。
在更新的代码中:
<general-form id="contacts-form" :data="{subject: 'abc'}" action="/contacts" method="post">
<el-form-item label="Subject" prop="subject">
<el-input v-model="data.subject"></el-input>
</el-form-item>
</general-form>
您正在此处将data
道具传递给Form
子级,但尝试在广告位内容中使用它。 el-input
在父级中寻找data
。 尝试这个:
var contactsPage = new Vue({
el: '#contacts-page',
data: {
data: { subject: 'abc' }
},
components: {
GeneralForm
}
});
和
<general-form id="contacts-form" :data="data" action="/contacts" method="post">
<el-form-item label="Subject" prop="subject">
<el-input v-model="data.subject"></el-input>
</el-form-item>
</general-form>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.