vue組件 非單文件組件的使用步驟
一,什么是組件
實(shí)現(xiàn)應(yīng)用中局部功能代和資源的集合(簡單來說就是將html,js,css,資源整合起來的一個(gè)小盒子)
理解:用來實(shí)現(xiàn)局部(特定)功能效果的代碼集合
為什么:一個(gè)界面的功能很復(fù)雜
作用:復(fù)用編碼,簡化項(xiàng)目編碼,提高運(yùn)行效率
組件又分為非單文件組件和單文件組件,一般常用的就是單文件組件
二,非單文件組件
2.1使用組件的三大步驟
1.創(chuàng)建組件
(1)如何定義一個(gè)組件?
使用Vue.extend(options )創(chuàng)建,其中options和new Vue(options)時(shí)傳 入的那個(gè)options兒乎一樣。但是也略有不同,組件內(nèi)不需要寫el該屬性,因?yàn)榻M件是直接服務(wù)于Vue實(shí)例的,所以并不需要在組件內(nèi)寫,并且組件寫完之后不只是服務(wù)于一個(gè)地方,這里就體現(xiàn)了組件的復(fù)用性,所以組件不能寫el。
2.注冊(cè)組件
(2)如何注冊(cè)組件?
1.局部注冊(cè):靠new Vue的時(shí)候傳入components選項(xiàng)
2.全局注冊(cè):靠Vue.component( '組件名,組件)
3.使用組件
(3)如何使用組件
編寫組件標(biāo)簽(使用組件)
下面是創(chuàng)建非單文件組件的全過程
(4)為什么data必須寫成函數(shù)?
避免組件被復(fù)用時(shí),數(shù)據(jù)存在引用關(guān)系。
注:使用template 可以配置組件結(jié)構(gòu)。
<body> <div id="user"> <!-- 第3步使用組件編寫組件標(biāo)簽 --> <school></school> <br> <xuesheng></xuesheng> </div> <div class="user2"> <hello></hello> </div> </body> <script> // 第一步:創(chuàng)建組件 // 創(chuàng)建school組件 const school = Vue.extend({ template: ` <div> <h2>學(xué)校名稱:{{schoolName}}</h2> <h2>地址:{{address}}</h2> </div> `, // 組件里不用寫el也不能寫el,而且組件里必須寫函數(shù)式 data() { return { schoolName: '山魚屋', address: 'Nanbian' } } }) // 創(chuàng)建student組件 const student = Vue.extend({ template: ` <div> <h2>學(xué)生名稱:{{studentName}}</h2> <h2>年齡:{{age}}</h2> <button @click = 'showName'>點(diǎn)我出名</button> </div> `, // 組件里不用寫el也不能寫el,而且組件里必須寫函數(shù)式 data() { return { studentName: '山魚屋', age: 20 } }, methods: { showName() { alert(this.studentName) } }, }) // 創(chuàng)建全局組件 const hello = Vue.extend({ template: ` <div> <h2>你好呀!{{name}}</h2> </div> `, data() { return { name: 'shanyu', } } }) // 注冊(cè)全局的組件 Vue.component('hello', hello); // 創(chuàng)建vm new Vue({ el: '#user', // 第2步.注冊(cè)組件 components: { // 鍵值對(duì)形式(若鍵值對(duì)同名可簡寫) school, xuesheng: student } }) new Vue({ el: '.user2', }) </script>
4.關(guān)于寫法的注意點(diǎn)
1.關(guān)于組件名
一個(gè)單詞組成: 第一種寫法( 首字母小寫):+ school,第二種寫法(首字母大寫) School
多個(gè)單詞組成: 第一種寫法(kebab-case命 名):my-school,第二種寫法(Came1Case命 名): MySchool (需要Vue腳手架支持)
注:
(1),組件名盡可能回避HTML中已有的元素名稱,例如: h3、 H2都不行。
(2).可以使用name配置項(xiàng)指定組件在開發(fā)者工具中呈現(xiàn)的名字。
2.關(guān)于組件標(biāo)簽
第1種寫法: <school></school>
第2種寫法: <school/> 備注:不用使用腳手架時(shí),<schoo1/> 會(huì)導(dǎo)致后續(xù)組件不能渲染。
3.簡寫方式
const school = Vue.extend(options)可簡寫為: const school = {options}
2.2組件的嵌套
和俄羅斯套娃差不多,大件套小件(其實(shí)vm下面還有一個(gè)名為app的組件,他管理著所有的組件)
<body> <div id="user"> </div> <script> // 創(chuàng)建room組件 const room = { template: `<div> <h2> 房間號(hào){{num}} </h2> <h2> puwei:{{pnum}} </h2> </div>`, data() { return { num: '222', pnum: '8' } } } // 創(chuàng)建students組件 const students = { template: `<div> <h2> 姓名:{{name}} </h2> <h2> 學(xué)號(hào):{{studentnum}} </h2> <room></room> </div>`, data() { return { name: '山魚', studentnum: '9657' } }, components: { room } } // 創(chuàng)建school組件 const school = { template: `<div> <h2> 校名:{{sname}} </h2> <h2> 地址:{{address}} </h2> <students></students> </div>`, data() { return { sname: '山魚學(xué)院', address: '華山道9088號(hào)' } }, components: { students } } const app = { template: ` <school></school> </div>`, components: { school } } // 創(chuàng)建app組件 new Vue({ template:`<app></app>`, el: '#user', components: { app, } }) </script> </body>
關(guān)于VueComponent
- school組件本質(zhì)是一個(gè) 名為VueComponent的構(gòu)造函數(shù),且不是程序員定義的,是Vue.extend生成的。
- 只需要寫<school/>(自閉合標(biāo)簽)或<school></school>, Vue解析時(shí)會(huì)幫我們創(chuàng)建school組件的實(shí)例對(duì)象,也就是Vue幫我們執(zhí)行的: new VueComponent(options)。
- 每次調(diào)用Vue.extend,返回的都是一一個(gè)全新的VueComponent(雖然雙胞胎特別像但是無論怎么來說也不是相同的一個(gè)人)
- this指向
(1).組件配置中data函數(shù)、methods中的函數(shù)、watch中的函數(shù)、computed中的兩數(shù)它們的this均 是[VueComponent實(shí)例對(duì)象]。
(2) new Vue(options )配置中data函數(shù)、methods中的函數(shù)、watch中的函數(shù)、computed中 的函數(shù) 它們的this均是[Vue實(shí)例對(duì)象]。
到此這篇關(guān)于vue組件 非單文件組件的使用步驟的文章就介紹到這了,更多相關(guān)vue非單文件組件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
vue中使用echarts繪制雙Y軸圖表時(shí)刻度沒有對(duì)齊的兩種解決方法(最新方案)
這篇文章主要介紹了vue中使用echarts繪制雙Y軸圖表時(shí),刻度沒有對(duì)齊的兩種解決方法,主要原因是因?yàn)榭潭仍陲@示時(shí),分割段數(shù)不一樣,導(dǎo)致左右的刻度線不一致,不能重合在一起,下面給大家分享解決方法,需要的朋友可以參考下2024-03-03Vue.js中的全局錯(cuò)誤處理函數(shù)errorHandler用法
這篇文章主要介紹了Vue.js中的全局錯(cuò)誤處理函數(shù)errorHandler用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-06-06vant的picker組件設(shè)置文字超長滾動(dòng)方式
這篇文章主要介紹了vant的picker組件設(shè)置文字超長滾動(dòng)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-12-12一個(gè)基于vue3+ts+vite項(xiàng)目搭建初探
當(dāng)市面上主流的組件庫不能滿足我們業(yè)務(wù)需求的時(shí)候,那么我們就有必要開發(fā)一套屬于自己團(tuán)隊(duì)的組件庫,下面這篇文章主要給大家介紹了一個(gè)基于vue3+ts+vite項(xiàng)目搭建的相關(guān)資料,需要的朋友可以參考下2022-05-05Vue實(shí)現(xiàn)當(dāng)前頁面刷新的七種方法總結(jié)
大家在vue項(xiàng)目中當(dāng)刪除或者增加一條記錄的時(shí)候希望當(dāng)前頁面可以重新刷新,但是vue框架自帶的router是不支持刷新當(dāng)前頁面功能,所以本文就給大家分享了七種vue實(shí)現(xiàn)當(dāng)前頁面刷新的方法,需要的朋友可以參考下2023-07-07