LEATH
2019-03-21 18:19:10
<!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
提交
取消