<!DOCTYPE html><html><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>Document</title><script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script></head><body><!-- TODO: 用全局组件方式写就没问题,用局部组件的方式就出现这个问题了 --><div id="app"> <Apptext v-for="item in list" :eatList="item" v-bind:key="item.id" ></Apptext></div><script> var app = new Vue({ el: '#app', components:{ Apptext:appText }, data: { list:[ { id: 0, text: '蔬菜' }, { id: 1, text: '奶酪' }, { id: 2, text: '随便其它什么人吃的东西' } ] }, }) var appText = { props:['eatList'], template: '<li>{{ eatList.text }}</li>' }</script></body></html>最近初学vue,看官方文档的一个例子自己用局部组件改写的吗,但是浏览器总是会报错,而用全局组件就没问题
5 回答
一只斗牛犬
TA贡献1784条经验 获得超2个赞
组件注册的步骤是对的,错在了appText这个变量上,当你使用这个变量的时候它的值是undefined,原因是你在使用前没有定义。
补充一下,为子组件传值时要使用kebab-case(短横线)的命名模式,而不是PascalCase(驼峰命名)
HUWWW
TA贡献1874条经验 获得超12个赞
Emmmm,这个是var的变量提升造成的,因为你把appText对象的赋值放在了Vue实例化的后面。
实际上是相当于这样的:
var appText = undefined
var app = new Vue({
el: '#app',
components: {
Apptext: appText // 这个时候appText是undefined的
},
data: {
list:[
{ id: 0, text: '蔬菜' },
{ id: 1, text: '奶酪' },
{ id: 2, text: '随便其它什么人吃的东西' }
]
},
})
appText = {
props:['eatList'],
template: '<li>{{ eatList.text }}</li>'
}
改成 把appText的赋值放在new Vue之前就可以了。
PS::eatList="item" 需要写成 :eat-list="item"
添加回答
举报
0/150
提交
取消