爲什麼VUE註冊組件命名時不能用大寫的?

這段時間一直在弄vue,當然也遇到很多問題,這裏就來跟大家分享一些註冊自定義模板組件的心得

首先“VUE註冊組件命名時不能用大寫“其實這句話是不對的,但我們很多人開始都覺得是對的,因爲大家都踩過大寫命名的坑

下面我們來看個例子:

<div id="app">
    <myTemplate></myTemplate>
</div>

<script>
    Vue.component('myTemplate',{
        template: '<h1>這裏是自定義組件的內容</h1>'
    })
    new Vue({
        el: '#app'
    })
</script>

當我看完官網的文檔後,信心滿滿的第一次準備自定義組件時,就寫的跟上面差不多類型的代碼

但是當我運行代碼時,組件並沒有被渲染出來,反而報錯了說我用的組件沒有註冊,我當時真是擠破腦袋想了半天也沒發現問題出在哪裏

這時候我在想難道我的命名和源碼裏的衝突了?於是我把代碼改成這樣了↓

<div id="app">
    <mytemplate></mytemplate>
</div>

<script>
    Vue.component('mytemplate',{
        template: '<h1>這裏是自定義組件的內容</h1>'
    })
    new Vue({
        el: '#app'
    })
</script>

然後運行代碼,ok完全正常,這時候大家都會認爲vue註冊組件不能用大寫命名,我當時也這麼認爲的,直到這兩天在用餓了麼elementUI框架,當我看了他們的源碼,發現原來並不是這樣

他們註冊組件的命名就和我第一次一樣myTemplate,標準的駝峯命名方法,那麼我一開始爲什麼會報錯呢?這是爲什麼呢?難道VUE嫌棄我?

原來是我調用組件時的方法錯了,VUE是允許用大寫字母來註冊組件的,但當你使用時得在駝峯命名的大寫字母間加上”-“並都改爲小寫,看下面代碼

<div id="app">
    <my-template></my-template>
</div>

<script>
    Vue.component('myTemplate',{
        template: '<h1>這裏是自定義組件的內容</h1>'
    })
    new Vue({
        el: '#app'
    })
</script>

  代碼運行正常,這個時候大家是不是看出來,vue其實是可以用大寫字母命名註冊的

後面我也試了很多種命名方式,比如”my-template“這樣也是可以的

”My-template“這樣的會報錯

----------------------------------------------------------------

後來在官網看到這句話camelCase vs. kebab-case    HTML 特性是不區分大小寫的。所以,當使用的不是字符串模版,camelCased (駝峯式) 命名的 prop 需要轉換爲相對應的 kebab-case (短橫線隔開式) 命名: 如果你使用字符串模版,則沒有這些限制。

一切都水落石出了,哈哈

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章