1. 程式人生 > 實用技巧 >vue元件 模板 腳手架

vue元件 模板 腳手架

1.元件

特點:一組可複用的vue例項

元件化和模組化的區別?

元件化:元件化是指解耦複雜系統時將多個功能模組拆分、重組的過程,有多種屬性、狀態反映其內部特性

特點:一個具有html+css+js的頁面

模組化:側重的功能的封裝,主要是針對Javascript程式碼,隔離、組織複製的javascript程式碼,將它封裝成一個個具有特定功能的的模組。

2.命名規則

1.不能以標籤起名,包含大寫
2.建議用駝峰起名
3.首字母大寫,後面直接寫名字。如果後面有大寫需要轉換為駝峰

3.template模板

<!DOCTYPE html>
<html lang='en'>

<head>
<meta charset='UTF-8'>
<meta name='viewport' content='width=device-width, initial-scale=1.0'>
<title>Document</title>
</head>

<body>
<div id='app'>
<v-one></v-one>
<v-two></v-two>
<v-three></v-three>
</div>
</body>
<!-- 開發環境 -->
<script src='https://cdn.jsdelivr.net/npm/vue/dist/vue.js'></script>
<script>
// 元件:一組可複用的vue例項
// 用法:全域性定義,區域性定義

// Vue.component('元件名',模板物件)
// components:{元件名:{模板物件}}

//必須要寫在例項物件之前
Vue.component('vOne',{
// template:要往頁面上渲染的模板
template:'<div>我是第一個元件</div>'
})


let vm = new Vue({
el: '#app',
data: {},
methods: {
},
components:{
vTwo:{
template:'<div>我是第二個模板物件<div>abc</div></div>'
},
vThree:{
template:`<div>我是第二個模板物件
<h2>我是標題2</h2>
</div>`
}
}
})
// 特點:template 有且只能有一個根元素 通常是div
</script>

</html>

4.data使用

重點:元件中定義data為函式,原因是:為了共享資料但是又互相不干擾.

<body>
<div id='app'>
<div>{{msg}}</div>
<p>{{msg}}</p>
<button @click = 'change'>點選修改msg</button>
<hr>

<v-one></v-one>
<v-one></v-one>
</div>
<template id="temp1">
<div>
<p>{{content}}</p>
<button @click='changeOne'>修改內容</button>
</div>
</template>
</body>

 let vm = new Vue({
el: '#app',
data: {
msg:'abc'
},
methods: {
change(){
this.msg='123'
}
},
components:{
vOne:{
template:'#temp1',
data(){
return {
content:'我要被修改了'
}
},
methods: {
changeOne(){
this.content = '我被修改了'
}
},
}
}
})
// 總結:data定義為函式的原因:由於需要共享資料,但是又要互不干擾,所以定義為函式

5.元件巢狀

注意:子元件只能在父元件中使用  子元件中的資料目前僅能供自己使用

<!DOCTYPE html>
<html lang='en'>

<head>
<meta charset='UTF-8'>
<meta name='viewport' content='width=device-width, initial-scale=1.0'>
<title>Document</title>
</head>

<body>
<div id='app'>

{{msg}}

<v-one></v-one>
</div>
<template id="temp1">
<div>
<h2>我是模板一</h2>
{{name}}
<!-- {{msg}} -->
<!-- <v-inner></v-inner> -->
</div>
</template>
<template id="temp2">
<div>
<h2>我是模板二</h2>

</div>
</template>
</body>
<script src='https://cdn.jsdelivr.net/npm/vue/dist/vue.js'></script>
<script>
// 元件:一個可複用的vue例項
let vm = new Vue({
el: '#app',
data: {
msg:'hello '
},
methods: {
},
components:{
vOne:{
template:'#temp1',
components:{
vInner:{
template:'<div>我是裡層巢狀的模板<v-three></v-three></div>',
components:{
vThree:{
template:'#temp2'
}
}
},
vOuter:{

}
},
data(){
return {
name:'張三'
}
}
}
}
})
// 總結:元件中關係:只有父子和非父子關係
// 巢狀:子元件只能在父元件中使用
// 元件中的data :定義為方法,必須有返回值,同時返回值的型別為物件
// data 中的資料只能供自己使用 如果其他元件需要使用需要傳值 比如:data,methods,filter,cmpputed,watch...
</script>

</html>

6.後臺管理頁面實現

注意:1.外層巢狀大盒子(container) 2.劃分佈局 3.書寫元件 4.元件巢狀 5.新增樣式 

7.生命週期 --8個鉤子函式 mounted 是最常用的

v-if 會引起生命週期的改變

v-show 不會引起

<!DOCTYPE html>
<html lang='en'>

<head>
<meta charset='UTF-8'>
<meta name='viewport' content='width=device-width, initial-scale=1.0'>
<title>Document</title>
</head>

<body>
<div id='app'>
<div v-html='msg' v-if='isShow'></div>
<button @click='change'>點選</button>

<hr>
<v-one v-show='isShow'></v-one>

</div>


<template id="temp1">
<div>
<div v-if='show'>{{con}}</div>
<button @click='changeC'>點選切換內容</button>
</div>
</template>
</body>
<script src='https://cdn.jsdelivr.net/npm/vue/dist/vue.js'></script>
<script>
let vm = new Vue({
el: '#app',
data: {
msg: 'hello world!',
isShow: true
},
methods: {
change() {
this.isShow = !this.isShow
}
},
components: {
vOne: {
template: '#temp1',
data() {
return {
con: '我是元件模板',
show: true
}
},
methods: {
changeC() {
this.con = '我被修改了!!!!!!!'
}
},
mounted() {
console.log('元件內容掛載完成')
},
destroyed() {
console.log('銷燬執行了')
},
}
},
mounted() {
console.log('vm內容掛載完成')
},
destroyed() {
console.log('vm銷燬執行了')
},
})
</script>

</html>

上述案例生命週期的執行過程為:

首先是vm例項的生命週期執行beforeCreate,created,beforeMount,之後是到元件走生命週期beforeCreate,created,beforeMount,mounted,最後是走vm的mounted。

7.腳手架

步驟:

//全域性安裝webpack
npm i webpack -g

//檢視版本
webpack -v

//全域性安裝vue腳手架 2.x
npm i vue-cli -g

//檢視版本
vue -V

以上操作只需要操作一次
//建立專案
vue init webpack demo

//進入專案
cd demo

//啟動
npm run dev //localhost:8080


注意: 安裝cnpm方法 淘寶映象
npm i -g cnpm --registry=https://registry.npm.taobao.org
注意:
1.名字:不能帶大寫
2.全選n
3.在當前資料夾中不能有vue.js這個檔案
1.index.html ->頁面的入口檔案
2.main.js->程式的入口檔案
3.App.vue ->元件-->類似上午的containter

總結:

後臺專案:

1.劃分元件

App.vue->container 整個容器

header,footer,main,left,right 都是單獨的元件 需要用誰直接 import匯入就行

//點選彈框

區域性定義彈框 首先要有彈框元件 alertbtn.vue 哪用在哪裡引入

<template>
<div class="left">
left
<v-alert></v-alert>
</div>
</template>
<script>
import vAlert from './aletrBtn'
export default {
components: {
vAlert
},
data() {
return {};
},
methods: {},
mounted() {},
};
</script>
<style>
.left{
width: 200px;
background: orange;
}
</style>

//全域性引入彈框 需要在main.js中定義

// 引入彈框的元件
import vAlert from './components/aletrBtn.vue'

Vue.component('vAlert',vAlert)

在其他頁面只需要呼叫元件名即可 (v-alert)

<template>
<div class="header">
header
<v-alert></v-alert>
</div>
</template>

<script>
export default {

}
</script>

<style>
.header{
width: 100vw;
height: 100px;
background: red;
}
</style>