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