需求要生成動(dòng)態(tài)生成電子文件以及后面簽字,但是又要在小程序里預(yù)覽效果。
.VueRouter基本概念
Vue-Router是 Vue.js官方的路由插件,讓用 Vue.js 構(gòu)建單頁應(yīng)用變得輕而易舉。功能包括:
Vue比較適合單頁面的項(xiàng)目,所有的網(wǎng)頁的內(nèi)容都是通過一個(gè)Html頁面進(jìn)行切換。在這個(gè)Html頁面中通過不同的路由來控制不同組件的顯示,這個(gè)控制就需要Vue-Router來完成。
Vue的單頁面應(yīng)用是基于路由和組件的,路由用于設(shè)定訪問路徑,并將路徑和組件映射(對應(yīng)聯(lián)系)起來,訪問不同的路徑就顯示不同的組件。
典型單頁面運(yùn)用
所有內(nèi)容都在一個(gè)Html頁面顯示,每個(gè)標(biāo)題都是一個(gè)組件,點(diǎn)擊后在不同組件中進(jìn)行內(nèi)容切換,顯示不同內(nèi)容。
Vue-Router目前有兩個(gè)版本。3.X版本 和 4.X 版本
Vue-Router的安裝
Vue-Router3.X 版本 : npm install vue-router@3
Vue-Router4.X 版本 : npm install vue-router@4
官方文檔: https://router.vuejs.org/zh/
如果在一個(gè)模塊化工程中使用它,必須要通過 Vue.use() 明確地安裝路由功能:
import Vue from 'vue'
import VueRouter from 'vue-router'
Vue.use(VueRouter)
2.實(shí)例演示:
將剛剛創(chuàng)建的項(xiàng)目 vuerouter-demo 拖入 Visual Studio Code 中。目前項(xiàng)目中還沒有 Vue-Router 需要進(jìn)行安裝。
注意:本例由于使用的是Vue2,所以要安裝vue-router3
在Visual Studio Code 中終端中輸入如下命令:
npm install vue-router@3
安裝完成后在 package.json 中及可以看到 vue-router3
下面模擬網(wǎng)易音樂的界面,在項(xiàng)目components文件夾中自定義Discover.vue、Friends.vue、My.vue三個(gè)組件,并用Vue-Router來控制它們的顯示與切換。
Discover.vue:
<template>
<div>
<h1>發(fā)現(xiàn)音樂</h1>
</div>
</template>
Friends.vue
<template>
<div>
<h1>關(guān)注</h1>
</div>
</template>
My.vue
<template>
<div>
<h1>我的音樂</h1>
</div>
</template>
三個(gè)組件都需要鏈接對應(yīng)關(guān)系,這就需要用Vue-Router來描述。
可以使用<router-link>標(biāo)簽來聲明路由鏈接,并使用<router-view>標(biāo)簽來聲明路由站位符。
我們在根組件 App.vue 中進(jìn)行路由的跳轉(zhuǎn),代碼如下:
<!--聲明路由鏈接-->
<router-link to="/discover">發(fā)現(xiàn)音樂</router-link>
<router-link to="/friends">關(guān)注</router-link>
<router-link to="/my">我的音樂</router-link>
這時(shí)App組件上就有三個(gè)按鈕,有興趣可以用CSS進(jìn)行樣式美化。這時(shí)候點(diǎn)擊但是還無法跳轉(zhuǎn)。因?yàn)槎x的鏈接和三個(gè)組件的對應(yīng)關(guān)系還沒有設(shè)置。因?yàn)閷?yīng)關(guān)系比較復(fù)雜,可以放到單獨(dú)的 js 文件中寫。
在項(xiàng)目 src 中創(chuàng)建一個(gè) router 文件夾,在里面新建一個(gè)名為 index.js 路由模塊,在里面定義對應(yīng)關(guān)系,代碼如下:
//導(dǎo)入Vue和VueRouter
import VueRouter from "vue-router";
import Vue from "vue";
//導(dǎo)入組件
import Discover from '../components/Discover.vue'
import Friends from '../components/Friends.vue'
import My from '../components/My.vue'
//將VueRouter設(shè)置為vue的插件
Vue.use(VueRouter)
const router=new VueRouter({
//指定hash屬性與組件的對應(yīng)關(guān)系
routes:[
{path:'/discover',component:Discover},
{path:'/friends',component:Friends},
{path:'/my',component:My},
]
})
path對應(yīng)鏈接;comment對應(yīng)組件。
此時(shí),組件要顯示到哪里去?這就需要站位標(biāo)簽<router-view>。需要組件在哪里顯示<router-view>就放到哪里。我們以放到根組件 App.vue 舉例,代碼如下:
一旦用戶點(diǎn)擊了“發(fā)現(xiàn)音樂”,瀏覽器就會(huì)跳轉(zhuǎn)的 discover 。根據(jù)前面路由的定義discover 對應(yīng)的是 Discover 組件。這時(shí)Discover 組件的內(nèi)容就會(huì)被渲染到<router-view>這個(gè)位置,從而完成界面的跳轉(zhuǎn)切換。
下面需要在 index.js 中將路由導(dǎo)出,代碼如下:
export default router
最后在main.js 中導(dǎo)入并設(shè)置,代碼如下:
import Vue from 'vue'
import App from './App.vue'
import router from './router/index'
Vue.config.productionTip=false
new Vue({
render: h=> h(App),
router:router
}).$mount('#app')
運(yùn)行 npm run serve 啟動(dòng)項(xiàng)目。
我們發(fā)現(xiàn)沒有顯示下面的視圖,點(diǎn)擊“發(fā)現(xiàn)音樂”等,鏈接才會(huì)切換,這就可以顯示出來了。
第一次加載是到首頁,如果這個(gè)時(shí)候加載組件而沒有內(nèi)容顯示,這樣也不合適。實(shí)際項(xiàng)目中會(huì)指定一個(gè)默認(rèn)加載的組件。如網(wǎng)易云音樂中,進(jìn)入首頁默認(rèn)是進(jìn)入“發(fā)現(xiàn)音樂”組件。
3.vue-router進(jìn)階
用戶在訪問地址A的時(shí)候,強(qiáng)制用戶跳轉(zhuǎn)到地址B,從而顯示特定組件的頁面。
通過路由規(guī)則的 redirect 屬性,指定一個(gè)新的路由地址,可以很方便地設(shè)置路由的重定向。
例如將首頁重定義為顯示“發(fā)現(xiàn)音樂”組件
{path:'/',redirect:"/discover"},
可以在組件下再嵌套組件,比如在“發(fā)現(xiàn)音樂”下再嵌套“推薦”、“歌單”等子路由。
在Discover.vue組件中,聲明 toplist 和 playlist 的子路由鏈接以及子路由占位符,代碼如下:
<template>
<div>
<h1>發(fā)現(xiàn)音樂</h1>
<!--子路由鏈接-->
<router-link to="/discover/toplist">推薦</router-link>
<router-link to="/discover/playlist">歌單</router-link>
<hr>
<router-view></router-view>
</div>
</template>
這個(gè)時(shí)候就需要新建 Toplist 和 Playlist 兩個(gè)組件。
然后在 index.js 中引入Toplist 和 Playlist 兩個(gè)組件,然后通過 children 屬性嵌套聲明子路由的方式來設(shè)置對應(yīng)關(guān)系。這時(shí)index.js 完整代碼如下:
//導(dǎo)入Vue和VueRouter
import VueRouter from "vue-router";
import Vue from "vue";
//導(dǎo)入組件
import Discover from '../components/Discover.vue'
import Friends from '../components/Friends.vue'
import My from '../components/My.vue'
import Toplist from '../components/Toplist.vue'
import Playlist from '../components/Playlist.vue'
//將VueRouter設(shè)置為vue的插件
Vue.use(VueRouter)
const router=new VueRouter({
//指定hash屬性與組件的對應(yīng)關(guān)系
routes:[
//當(dāng)用戶訪問 / 時(shí),調(diào)轉(zhuǎn)到 /discover
{path:'/',redirect:"/discover"},
{path:'/discover',
component:Discover,
//通過 children 屬性,可以嵌套聲明子路由
children:[
{path:"toplist",component:Toplist},
{path:"playlist",component:Playlist},
]
},
{path:'/friends',component:Friends},
{path:'/my',component:My},
]
})
//導(dǎo)出默認(rèn)路由
export default router
很多路由鏈接,如下:
<router-link to="prodect/1">商品1</router-link>
<router-link to="prodect/2">商品2</router-link>
<router-link to="prodect/3">商品3</router-link>
const router=new VueRouter({
//指定hash屬性與組件的對應(yīng)關(guān)系
routes:[
{path:"prodect/1",component:Prodect},
{path:"prodect/2",component:Prodect},
{path:"prodect/3",component:Prodect},
]
},
{path:'/friends',component:Friends},
{path:'/my',component:My},
]
})
上述方式復(fù)用性非常差。
思考:如有一個(gè)商品列表,當(dāng)用戶點(diǎn)商品的時(shí)候就跳轉(zhuǎn)到該商品的詳情,每一個(gè)商品都會(huì)有商品詳情,不可能給每一個(gè)商品寫一個(gè)商品詳情的組件。這時(shí)就希望跳轉(zhuǎn)到詳情組件的時(shí)候重用組件里面的東西。
動(dòng)態(tài)路由:就是把Hash地址中可變的部分定義為參數(shù)項(xiàng),從而提高路由規(guī)則的復(fù)用性。在 vue-router 中使用英文的冒號 ( : )來定義路由參數(shù)項(xiàng),如下:
{path : '/prodect/:id,component:Prodect'}
下面進(jìn)行實(shí)例演示:
1.有商品就需要先建一個(gè)商品組件:Prodect.vue
2.假設(shè)商品組件是基于 My.vue 組件的子路由,修改 My.vue 組件,如下:
<template>
<div>
<h1>我的音樂</h1>
<router-link to="/My/1">商品1</router-link>
<router-link to="/My/2">商品2</router-link>
<router-link to="/My/3">商品3</router-link>
<router-view></router-view>
</div>
</template>
3.在 index.js 中設(shè)置對應(yīng)關(guān)系,先導(dǎo)入 Prodect.vue 組件
import Prodect from '../components/Prodect.vue'
4.使用 children 屬性定義跳轉(zhuǎn),代碼如下:
{path:'/my',
component:My,
children:[
{path:":id",component:Prodect},
]
},
5.啟動(dòng)項(xiàng)目,在瀏覽器中就可以顯示效果:點(diǎn)擊“我的音樂”,然后在顯示的商品1/2/3 中任點(diǎn) 一個(gè),都可以顯示“商品”這個(gè)內(nèi)容出來。
現(xiàn)在有一個(gè)問題,在跳轉(zhuǎn)到 Prodect.vue 組件時(shí),如何知道需要顯示商品幾的詳情呢?
解決方法:
方法1:通過動(dòng)態(tài)路由匹配的方式渲染出來的組件中,可以使用 $route.params 對象訪問到動(dòng)態(tài)匹配的參數(shù)項(xiàng),比如在商品詳情組件的內(nèi)部,根據(jù) id 值,請求不同的商品數(shù)據(jù)。修改代碼如下:
這時(shí),點(diǎn)擊不同的商品就顯示出是商品幾的詳情
方法2:為了簡化路由參數(shù)的獲取形式,vue-router 允許在路由規(guī)則中開啟 props 傳參,index.js 中修改示例代碼如下:
{path:":id",component:Prodect,props:true},
Prodect.vue 組件修改如下:首先定義一個(gè)參數(shù) id ;然后就不需要 $route.params,可以直接用于 id 來傳遞參數(shù)了,瀏覽器顯示效果同上。
<template>
<h3>商品{{ id }}</h3>
</template>
<script>
export default {
props:["id"]
}
</script>
聲明式導(dǎo)航:<router-link :to "....">
編程式導(dǎo)航:router.push(...)
除了使用<router-link>創(chuàng)建 a 標(biāo)簽來定義導(dǎo)航鏈接,還可以借助 router 的實(shí)例方法,通過編寫代碼來實(shí)現(xiàn)。
想要導(dǎo)航到不同的 URL ,可以使用 router.push 方法。這個(gè)方法會(huì)向 history 棧添加一個(gè)新的記錄。所以,當(dāng)用戶點(diǎn)擊瀏覽器“后退”按鈕時(shí),則回到之前的 URL 。
當(dāng)點(diǎn)擊 <router-link>時(shí),這個(gè)方法會(huì)在內(nèi)部調(diào)用。所以,點(diǎn)擊<router-link :to "....">等同于調(diào)用router.push(...) 。
<template>
<div>
<h3>推薦</h3>
<button @click="gotoProduct(2)">跳轉(zhuǎn)到商品2</button>
</div>
</template>
<script>
export default {
methods:{
gotoProduct:function(id){
this.$router.push('/movie/${id}')
}
}
}
</script>
導(dǎo)航守衛(wèi)可以控制路由的訪問權(quán)限
比如還沒有登錄就想跳轉(zhuǎn)到訂單頁面,這時(shí)可以用路由守衛(wèi)進(jìn)行統(tǒng)一控制。
全局導(dǎo)航守衛(wèi)會(huì)攔截每個(gè)路由規(guī)則,從而對每個(gè)路由進(jìn)行訪問權(quán)限控制。可以使用 router.beforeEach 注冊一個(gè)全局前置守衛(wèi):
router.beforeEach(( to,from,next )=>{
if ( to.path==='/main' && !isAuthenticated){
next( '/login' )
}
else{
next()
}
})
to:即將進(jìn)入目標(biāo)
from:當(dāng)前導(dǎo)航正要離開的路由
在守衛(wèi)方法中,如果聲明了 next 形參,則必須調(diào)傭 next()函數(shù),否則不允許用戶訪問任何一個(gè)路由
直接放行:next()
強(qiáng)制停留在當(dāng)前頁面:next(false)
強(qiáng)制跳轉(zhuǎn)到登錄頁面:next( '/login' )
早安,我是葉梓,今天是攝影早自習(xí)陪伴大家的第749天。我收到了來自郵儲銀行的小伙伴們的提問:“團(tuán)隊(duì)的合影要怎么拍更有活力?”他們說過去有很多的團(tuán)建活動(dòng),拍了不少合影,但看上去總是比較呆板。自己看看、做個(gè)紀(jì)念也就罷了,但是如果要發(fā)出來的話總覺得還是差點(diǎn)意思。
我覺得這是一個(gè)特別重要的事情,而且又很少有人去講,所以咱們這周的攝影早自習(xí)就花點(diǎn)時(shí)間來了解一下合影到底應(yīng)該怎么拍。正好春暖花開了,免不了得你會(huì)跟朋友、同事、同學(xué)出去玩的時(shí)候總得拍幾張合影吧,那我們就來聊聊怎么拍比較好看。今天我們先把注意力集中在一個(gè)事情上:站位。也就是到底怎樣去列隊(duì)會(huì)更好看些。
圖一 反面案例 圖片來源:rice.edu
第一張照片是非常典型的合影的站法,幾乎是把所有不該犯的問題全都犯了一遍,站出來那個(gè)樣子是要多尷尬有多尷尬。它唯一做得好一點(diǎn)的就是選擇了一個(gè)相對比較簡潔的背景,但即便如此,右邊那個(gè)花壇還是太搶眼了,綠色太綠了。所以,我們合影站位的第一個(gè)要點(diǎn)還是要選擇一個(gè)比較簡潔的背景。背景它可以是美的,但是它不能是奪目的,搶掉了人物的風(fēng)頭。選擇在哪拍照其實(shí)是個(gè)特別特別重要的事情,不要小看它,不要說“差不多就行了”,這個(gè)態(tài)度是不對的。
圖二 圖片來源:kerryregoconsulting.com
第二個(gè)要點(diǎn)是在站位的時(shí)候人物和人物要站得盡量的緊一點(diǎn),與此同時(shí)人物的四周(在構(gòu)圖上)要多留些空間。大家一聽就明白了,四周留空間還不就是為了讓人物與人物之間顯得更緊密,關(guān)系顯得更好一些,對不對?不要給人感覺不好意思站得太近的感覺。
圖三 圖片來源:sohu.com
第三個(gè)要點(diǎn)是要特別留意人群的整體輪廓。注意,我不是說個(gè)人是胖是瘦,不是說人物輪廓,而是人群的整體的外輪廓。比如說圖一,你把人物的外輪廓連起來一看,它就是個(gè)方形啊!方形是非常無趣的,呆板的。再看看圖三,是偶像練習(xí)生大合影,是個(gè)倒梯形。倒置的梯形既有一種活潑的感覺,又不失穩(wěn)重,就比剛才的方形要好多了。你以為這個(gè)形狀是隨便來的嗎?它是攝影師刻意安排的!是攝影師要跟他們說你們該怎么擺,怎么站。
圖四 圖片來源:fitcitysa.com
第四張照片是一個(gè)特別簡單的粗暴的合影,其實(shí)它里面還是有很多問題的,但是不管怎么樣,至少它在人群的外輪廓上形成一個(gè)非常有趣的兩頭大,中間小的形狀,人物站成了一個(gè)弧形,但是攝影師又沒有站在圓心上,而是站在了一側(cè)的遠(yuǎn)一點(diǎn)的位置,形成一個(gè)近大遠(yuǎn)小的有兩條曲線構(gòu)成的外輪廓,非常漂亮。
圖五 圖片來源:www.zipworld.co.uk
所以這是我說的第三個(gè)要點(diǎn),人群的外輪廓要加以注意。最好能有些曲線、斜線,有些高低錯(cuò)落就更好了。你又不是士兵,你如果站不到士兵那么整齊,就干脆高低錯(cuò)落一點(diǎn),顯得更生動(dòng)活潑。我們現(xiàn)在都比較講究個(gè)性,講究人性,講究每一個(gè)人都有自己的性格,然后共同組成一個(gè)團(tuán)隊(duì),所以呢,站隊(duì)的時(shí)候不用太整齊。
圖六 圖片來源:mullenlowegroup.com
第四個(gè)要點(diǎn)是人物的姿態(tài)最好是更自然一些。站著的、坐著的、坐在地上的、甚至是躺著的,隨便給你自己去搭配。很明顯,如果是都站著的話,第一是姿勢不知道該怎么擺,拍出來會(huì)是一副非常呆板的樣子。第二這個(gè)團(tuán)隊(duì)會(huì)顯得沒有活力。我們對比下圖一里面這些人,只有一個(gè)人物的腿稍微有點(diǎn)動(dòng)作,其他人都太呆板。然后你往下拉到圖六,看看這張照片里面的人物,有的坐得高一些,有的坐得低一些,有的是站著的,這樣的人物占位就非常舒適自然,有人還把手搭在別人肩膀上,有人在對著旁邊那個(gè)人豎大拇指,有人笑得不行了,有人把手背在背后,還挺注意形象的,最右邊那個(gè)人還有一點(diǎn)點(diǎn)嚴(yán)肅……沒關(guān)系,把你自己的狀態(tài)展現(xiàn)出來就好,我們更希望通過合影看到的是一個(gè)個(gè)真實(shí)的人物組成的團(tuán)隊(duì),而不是一看就非常拘謹(jǐn)?shù)臍夥眨菢拥暮嫌拔覀兤鋵?shí)都不會(huì)成天擺在桌上去看的,太沒有意思了。
所以你最好去找一個(gè)最舒服的姿態(tài)去站立,如果你是攝影師的話,就引導(dǎo)對方。對方不知道擺什么的話,你就得發(fā)出指令了:你坐著,你站著,你把手撘他肩膀上,等等,總之是模擬生活中真實(shí)的姿態(tài)。
圖七 圖片來源:theherringlawgroup.com
第五個(gè),也是今天關(guān)于站位的最后一個(gè)要點(diǎn),就是這個(gè)團(tuán)隊(duì)里面如果有個(gè)核心人物的話就要讓他站“C位”,也就是站中央。但他也不一定要站在絕對的中央,稍微偏一點(diǎn)在黃金分割線的位置也是可以的。除了站中央以外,其實(shí)你還應(yīng)該讓這個(gè)主角通過穿著不同的服飾,或者是擺出不同的姿態(tài)來凸顯這個(gè)人物的重要性。服飾方面,如果大家都是灰色的深色的衣物,那你就該來點(diǎn)紅色,紅圍巾往身上一掛,這個(gè)人肯定主角了。或者說所有人都穿西裝,那這個(gè)主角其實(shí)可以脫掉西裝穿個(gè)襯衣,他就是主角了。這就是服飾可以起到的突顯的作用。
另外你也可以去找一個(gè)不同的姿態(tài)。如果大家都站著,你坐著行不行?大家都坐著,你站著行不行?只要是不一樣的姿態(tài),那個(gè)人就一定是個(gè)關(guān)鍵人物。你還可以讓旁邊的、周圍的人向這個(gè)主要人物方向稍微側(cè)一點(diǎn)身,這樣一來他就有了一種被大家簇?fù)淼母杏X了,不見得要所有的人都都朝向這個(gè)主要人物,只要有那么幾個(gè)人的身體、頭部、眼睛的方向朝向這個(gè)人物,那么他就會(huì)變得非常的明顯。
今天分享的是關(guān)于合影的站位技巧,關(guān)于合影的問題你們還想了解什么樣的知識?歡迎在底部向我留言,我非常期待你們的提問。關(guān)于上周的免費(fèi)直播課《攝影評片會(huì)》,現(xiàn)在已經(jīng)可以回看了,大家可以點(diǎn)擊下方藍(lán)色“了解更多”或打開網(wǎng)易云課堂搜索“你的照片我來評”,找到第6期就可以看到評片會(huì)的回放視頻。
今天是攝影早自習(xí)陪伴大家的第749天,我是葉梓,每天早上6點(diǎn)半,微信公眾號“攝影早自習(xí)”,不見不散。
【攝影評片會(huì)】回看
【觀看方法1】點(diǎn)擊下方藍(lán)色“了解更多”
【觀看方法2】打開網(wǎng)易云課堂網(wǎng)頁或APP,搜索:“你的照片我來評”,選擇課時(shí)6觀看
加入“攝影早自習(xí)”【微信群】
1、添加葉梓老師微信:leonyee7
2、說明入群(暗號:頭條)
【微博】@葉梓
【QQ群】384277488
【微博超級話題】#365天拍攝計(jì)劃#
【攝影自習(xí)室】知識星球(APP)搜索:攝影自習(xí)室
原文鏈接:http://www.katoclass.com/zaozixi20170416.html
*請認(rèn)真填寫需求信息,我們會(huì)在24小時(shí)內(nèi)與您取得聯(lián)系。