vue局部组件的问题

<!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,看官方文档的一个例子自己用局部组件改写的吗,但是浏览器总是会报错,而用全局组件就没问题


LEATH
浏览 654回答 5
5回答

慕哥9229398

appText是局部注册的没错,但是Apptext这个是什么,没有说明哦

红颜莎娜

你这样写明显是组件会报错啊,appText这个应该是apptext

一只斗牛犬

组件注册的步骤是对的,错在了appText这个变量上,当你使用这个变量的时候它的值是undefined,原因是你在使用前没有定义。补充一下,为子组件传值时要使用kebab-case(短横线)的命名模式,而不是PascalCase(驼峰命名)

开满天机

注册驼峰 引用小写短横线

HUWWW

Emmmm,这个是var的变量提升造成的,因为你把appText对象的赋值放在了Vue实例化的后面。实际上是相当于这样的:var appText = undefinedvar app = new Vue({&nbsp; el: '#app',&nbsp; components: {&nbsp; &nbsp; Apptext: appText // 这个时候appText是undefined的&nbsp; },&nbsp; data: {&nbsp; &nbsp; list:[&nbsp; &nbsp; &nbsp; { id: 0, text: '蔬菜' },&nbsp; &nbsp; &nbsp; { id: 1, text: '奶酪' },&nbsp; &nbsp; &nbsp; { id: 2, text: '随便其它什么人吃的东西' }&nbsp; &nbsp; ]&nbsp; },})appText = {&nbsp; props:['eatList'],&nbsp; template: '<li>{{ eatList.text }}</li>'}改成 把appText的赋值放在new Vue之前就可以了。PS::eatList="item" 需要写成 :eat-list="item"
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript