GITHUB: 使用Quasar設計旅遊網站
文章連接: 使用Quasar設計Material和IOS風格的響應式網站
Quasar
是一款基於Vue.js
開發的UI
框架,可讓你輕鬆構建網站簡潔明快的界面,更重要的是它還能讓你輕鬆作好RWD
(響應式網站設計),除此以外還能幫助你加上PWA
,使你的網頁變成手機上的App
。javascript
如下內容來自官網Quasar Framework,歸納了Quasar
的主要特色。css
Quasar
是MIT
許可的開源框架(基於Vue),可幫助Web
開發人員建立:html
PWA
Apache Cordova
構建移動App
Electron
)Material
及IOS
兩種主題RWD
快速響應UI
組件庫Vuex
、VueRouter
、Vuei18n
(多國語系)首先安裝Node.js
和vue-cli
,具體安裝方法查看官網資料。vue
而後安裝Quasar
,npm install -g quasar-cli
。java
最後搭建項目:quasar init <folder name>
webpack
取代main.js
的quasar.config.js
設置文件:git
import components
i18n
設置多國語系icons
移除註釋便可使用開發模式
下的HTTPS以及port
設置CSS
動畫設置PWA
、manifest
等設置quasar.config.js
plugins
之前在Vue
安裝其餘的plugin
會在main.js
裏引入,而在Quasar
就會取代main.js
成爲所有配置文件。github
css
CSS的引入都會放在這個文件,默認的位置/src/css
,所需的CSS庫已經準備好,能夠直接使用。web
extra
這裏是設置是否引入quasar-extras的內容。ajax
Package | name | 說明 |
---|---|---|
Roboto Font | roboto-font |
Material主題的建議字體 |
Roboto Font Latin Extended | roboto-font-latin-ext |
Material主題的建議字體 |
Material Icons | material-icons |
Material風格的icon |
MDI (Material Design Icons) | mdi |
Material風格的icon 擴展 |
Font Awesome | fontawesome |
自由選擇icon |
Ionicons | ionicons |
ionicons 的icon |
Animate.css | animations |
網頁組件動畫 |
scopeHoiting
默認true
,用來提高webpack
運行時的性能
VueRouterMode
設置Vue Router
的模式,有history
、hash
兩種值。
vueCompiler
包含兩種Vue的編譯模式vue runtime
+compiler
,默認只有runtime-only
運行時編譯
gzip
使網站支持gzip
的格式。
analyze
在build
時會運行webpack-bundle-analyzer
工具。
extractCSS
提取CSS到文件中。VueLoader
extendWebpack
在dev
模式中服務器的設置。
https
port
設置成指定的port
,當quasar在運行dev
模式時,遇到相同的port
時會本身再+1
。
open
是否在dev
指令執行完成後,自動開啓此網站的分頁在瀏覽器上。
quasar dev
打開初始頁面,頁面的header
和drawer
都是在layout/MyLayout.vue
裏。
一些經常使用的屬性:
屬性 | 取值 | 說明 |
---|---|---|
side |
String |
有兩個值left ,right ,決定要出如今左邊仍是右邊 |
overlay |
Boolean |
設置側邊欄彈出時是擠壓q-page-container 仍是直接蓋在上面 |
content-style |
Object |
設置側邊欄的CSS |
content-class |
String/Object/Array |
設置側邊欄的class |
mini |
Boolean |
把側邊欄縮小到只有icon |
這裏的CSS要用
Object
的方式傳入。
:content-style="{color: 'red'}"
演示項目:
<q-layout-header> <q-toolbar color="primary" text-color="primary" inverted> <q-toolbar-title> 好玩旅遊網 <div slot="subtitle">WeFunWeb</div> </q-toolbar-title> <div class="gt-xs"> <q-btn class="q-mr-md" flat>精選景點</q-btn> <q-btn class="q-mr-md" flat>美食地圖</q-btn> <q-btn class="q-mr-md" flat>夜宿曉行</q-btn> <q-btn class="q-mr-md" flat>夜宿曉行</q-btn> <q-btn class="q-mr-md" flat>註冊</q-btn> <q-btn class="q-mr-md" flat>登陸</q-btn> </div> </q-toolbar> </q-layout-header>
color
Quasar內建色:color-palette
在/src/css/themes/common.variables.styl
裏面增長調色板的顏色。
inverted
讓背景色變成白色,而後使原來白色的文字變成設置的背景色。
glossy
加上玻璃效果
gt-xs
用來設置顯示像素高於576px
的頁面樣式。
q-mr-md
mr
等於margin-right
sm
就是size
的值爲small
其餘非外觀的功能屬性:
disable
,:disable="true"
時按鈕禁用label
設置按鈕的文字type
能夠是button
、submit
、reset
其中一種loading
,值爲true
顯示讀取中percentage
顯示讀取的圓圈,要跟loading
一塊兒使用dark-percentage
用在亮色系的按鈕上修改Drawer
v-model="rightDrawerOpen"
控制彈出側邊欄的位置content-class="bg-grey-10"
背景色side="right"
按鈕設置在多邊設置了rightDrawerOpen
須要加到data
裏。
export default { name: 'MyLayout', data () { return { rightDrawerOpen: false } } }
控制顯示的class
用lt-sm
只要像素小於sm(768px)
就會顯示該區域。
ListItem
使用Dark屬性使得組件內容在暗色背景下更好顯示
List中可用組件,這些組件須要本身去配置文件中自行引入。
QListHeader
List上的標題QItemSeparator
分割線QItem
QItemSide
可分紅左右兩側的區塊QItemMain
中間的區塊QItemTitle
區塊中的標題在src/pages/
下新建Index
文件夾,並在此文件夾下新建Index.vue
做爲首頁,刪除原來的Index.vue
文件。
在src/router/routers.js
修改Index.vue
的路徑。
在src/pages/Index
下新建SectionCarousel.vue
,並在Index.vue
中引入。
而後再template
下的q-page
中加入section-carousel
<template> <q-page> <section-carousel></section-carousel> </q-page> </template>
在設置文件quasa.config.js
中引入:
framework: { components: [ 'QCarousel', 'QCarouselSlide', 'QCarouselControl' ... ], }
<template> <q-carousel color="white" infinite arrows autoplay height="400px" > <q-carousel-slide img-src="statics/images/papercut1.jpg"/> <q-carousel-slide img-src="statics/images/papercut2.jpg"/> </q-carousel> </template>
Quasar在carousel
中有個子組件QCarouselControl
用來自定義按鈕在頁面上。
根據官方文檔的範例,QCarouselControl
要放在QCarousel
的最後面,也就是QCarouselSlide
的後面。
<q-carousel-control position="center" slot="control-nav" slot-scope="carousel" class="carouselInput"> </q-carousel-control>
在q-carousel-control
中加入內容:
<div class="main"> <h6 class="title">新銳旅遊網站</h6> <p class="subtitle">您身邊的好玩專家</p> <p>發現周邊好玩的地方,玩得快樂,玩得精彩。</p> </div>
<style lang="stylus" scoped> .carouselInput { width: 90% } .carouselInput .main { text-align center color: #f50057 } .carouselInput .title { font-size 48px } .carouselInput .subtitle { font-size 24px } </style>
@media (min-width: 768px) { .carouselInput .title { font-size 48px } .carouselInput .subtitle { font-size 24px } } @media (max-width: 768px) { .carouselInput .title { font-size 24px } .carouselInput .subtitle { font-size 16px } }
input
首先到quasar.config.js
中引入QInput
framework: { components: ['QInput'] }
在<div class="main">
後面加入q-input
內容:
<q-input inverted-light color="white" placeholder="輸入城市/景點 或是想去的地方" :after="[{icon:'fas fa-search-location'}]" v-model="search"> </q-input>
inverted
顯示背景 color
主題顏色after
用來顯示輸入框先後icon
最後綁定v-model="search"
,此時須要在data
中添加value
值,不然會報錯。
data() { return { search: '' } }
使用 Flex CSS調整組件長度。
<div class="row"> <div class="col-md-2 col-xs-1"></div> <div class="col-md-8 col-xs-10"> <q-input ...></q-input> </div> <div class="col-md-2 col-xs-1"></div> </div>
autocomplete
引入QAutocomplete
組件:
framework: { components: ['QAutocomplete'] }
加入q-autocomplete
:
<q-input ...> <q-autocomplete :static-data="{field: 'label', list: countries}"/> </q-input>
static-data
field
用於搜索數據的欄位list
搜索的數據來源countries: [ {label: '廣州市', icon: 'fas fa-map-marker-alt'}, {label: '深圳市', icon: 'fas fa-map-marker-alt'}, {label: '珠海市', icon: 'fas fa-map-marker-alt'}, {label: '[網美景點]香山公園,秋季賞楓勝地', stamp: '北京市'}, {label: '珠海長隆[海豚劇場]精彩不容錯過!精彩變身演出搶先看', stamp: '珠海,長隆', rightTextColor: 'pink-13'} ]
filter
在q-autocomplete
中加入filter
:
<q-autocomplete :static-data="{field: 'label', list: countries}" :filter="advFilter" />
引入lodash
處理filter
。
在quasar.config.js
中引入QPopover
。Popover
no-focus
不設焦點fit
彈出框跟輸入框等長v-show="!search"
彈框和候選框不一樣時出現使用FlexCSS
來進行排版。
<div class="row viewList"> <div class="col-sm-4 col-xs-12"></div> <div class="col-sm-4 col-xs-12"></div> <div class="col-sm-4 col-xs-12"></div> </div>
設配手機端,在CSS底部加入:
@media (max-width: 576px) { .viewList { width: 280px } }
解決在手機像素下原來Popover
不能自動fix
的問。這裏應該是小於Popover的fix
的最小寬度。
列表類直接用list
作最快。
<div class="col-sm-4 col-xs-12"> <q-list> <q-list-header>熱門目的地</q-list-header> <q-item> <q-item-main>珠海</q-item-main> </q-item> </q-list> </div>
在src/components
下新建LIcon.vue
,提高組件複用。
主要使用了q-icon
來引入Font Awesome的icon
。
具體代碼:
SectionCarousel.vue
src/components/LIcon.vue
在src/pages/Index
下新建SectionCards.vue
組件,用來做爲卡片區塊。
在Index.vue
中引入SectionCards.vue
。
<div class="row"> <div class="col-12"><b>本月最精選</b></div> <div class="col-lg-3 col-sm-6 col-xs-12">卡片一</div> <div class="col-lg-3 col-sm-6 col-xs-12">卡片二</div> <div class="col-lg-3 col-sm-6 col-xs-12">卡片三</div> <div class="col-lg-3 col-sm-6 col-xs-12">卡片四</div> </div>
卡片內的內容都會大量重複,因此直接把卡片獨立成一個組件。
在src/components/
下新建一個LCard.vue
。
在
quasar.config.js
中引入卡片組件
Cards
framework: { components: [ 'QCard', 'QCardTitle', 'QCardMain', 'QCardMedia', 'QCardSeparator', 'QCardActions' ] }
卡片主要分紅三個部分:
q-card-media
放照片影片的區塊q-card-title
卡片的標題q-card-main
卡片的主內容q-card-actions
用來放按鈕等操做的區塊q-card-separator
分隔線在SectionCards.vue
中引入LCard.vue
。
<div class="col-lg-3 col-sm-6 col-xs-12"> <l-card/> </div>
import LCard from 'src/components/LCard.vue' export default { components:{ LCard }, }
繼續補上評分和地標的Icon
。
讓LCard.vue
可以動態獲取數據:
<template> <q-card inline> <q-card-media> <img :src="image"/> </q-card-media> <q-card-title> <span>{{title}}</span> <div class="q-mt-sm" slot="subtitle"> <l-icon :icon="'fas fa-star'" :text="rate" :color="'orange'" class="q-mr-md"/> <span class="q-mr-sm">{{comment}}個評價</span> <span>{{view}}人瀏覽</span> </div> </q-card-title> <q-card-main> <l-icon :icon="'fas fa-map-marker-alt'" :text="locate" :color="'grey'" class="q-mr-md"/> </q-card-main> </q-card> </template> <script> import LIcon from 'src/components/LIcon'; export default { name: "LCard", props: { image: String, title: String, rate: String, comment: String, view: String, locate: String }, components: { LIcon } } </script>
新增一個data
數據monthBestList
,而後在template
模板中使用v-for
獲取數據並顯示。
<template v-for="(data,index) in monthBestList"> <div class="col-lg-3 col-sm-6 col-xs-12 q-pa-sm" :key="index"> <l-card :title="data.title" :rate="data.rate" :comment="data.comment" :view="data.view" :locate="data.locate" :image="data.image" /> </div> </template>
在src/pages
下新建place
文件夾,並在此文件夾下新建Index.vue
做爲文章的主要頁面。
要進行頁面導航/切換須要用到Vue Router。
在router/routes.js
中加入導航:
const routes = [ { path: '/', component: () => import('layouts/MyLayout.vue'), children: [ {path: '', component: () => import('pages/Index')}, {path: 'Place', component: () => import('pages/Place')} ] } ];
在http://localhost:8080/#/place
中查看效果。
視差(Parallax)
在quasar.config.js
中引入QParallax
組件。
<template> <q-page> <q-parallax :src="localData.image" :height="400"> <p>{{ localData.title }}</p> </q-parallax> </q-page> </template>
按照8格+4格進行排版:
<div class="row place-main"> <div class="col-8"></div> <div class="col-4"></div> </div>
CSS補上左右margin 5%
讓頁面看起來不會太滿。
.place-main { margin-left 5% margin-right 5% }
這裏要用Quasar的麪包屑BreadCrumbs組件。
在quasar.config.js
中引入:
'QBreadcrumbs', 'QBreadcrumbsEl',
這裏按照8格+4格
設定,左側欄要設爲文字靠右對齊。
引入LIcon.vue
圖標組件:
<div class="col-8 info-left"> <l-icon class="q-mt-sm" :text="'景點編號:' + localData.id" :icon="'fas fa-tag'" :color="'grey'"/><br> ... </div>
評分組件Rating
表單字段(Field)
Field的組件有QInput
、QSeclet
、QDatetime
、QChipsInput
在quasar.config.js
中引入組件
<q-field label="信箱"> <q-input suffix="@gmail.com" v-model="model"/> </q-field>
label
設置標題文字icon
設置標題的icon
icon-color
設置標題icon
的顏色helper
組件地下的輔助文字error
控制組件在錯誤時會變成紅色警示error-label
錯誤時會顯示的文字warning
控制組件是否爲警告狀態warning-label
同error-label
count
顯示目前輸入多少文字inset
用來爲沒有icon/label
的欄位留空orientation
組件的排列方向(水平horizontal
/垂直vertical
)label-width
文字區塊的寬度(以12
格寬度劃分)假設文字的寬度要和輸入同樣長,則設定爲6
dark
是文字反白,適用在暗色背景下Chips Input
<q-chips-input float-label="興趣" v-model="model" />
export default { data() { return { model: [] } } }
chips-color
改變chips
的顏色chips-bg-color
改變chips
的背景顏色add-icon
替換輸入時顯示在右邊的enter
按鈕icon
prefix
加入前綴文字(不影響array
內的值)suffix
加入後綴文字,能夠跟前綴一塊兒用hide-underline
移除本來輸入框的底線no-parent-field
若是外面套有QField,能夠避免跟QField的效果連結upper-case
自動轉大寫lower-case
自動轉小寫大部分組件都會重複的基本屬性
float-label
懸浮標題stack-label
固定式標題color
組件顏色inverted
是否有背景色inverted-light
改善亮色背景下組件的顯示dark
改善暗色背景下組件的顯示error
錯誤warning
警告disable
跟readonly
相似,可是會有灰鍵效果@input(newVal)
輸入文字的同事就會觸發@change(newVal)
數組數值改變觸發@clear(clearVal)
數組被清空時觸發@duplicate(val)
輸入重複的值時觸發@add(val)
輸入時觸發@remove({index, value})
其中一個組件被刪除時觸發這裏的用法一般都是在組件中加入red
屬性,而後再其餘地方使用this.$refs
來對這些組件進行操做。
add(value)
加入值到組件的數組中remove(index)
刪除指定索引的值focus()
聚焦在組件上select()
選擇組件clear()
清除組件中數組的值<q-chips-input ref="myChipInput" />
addSomething() { this.$refs.myChipInput.add('Hello Quasar') }
引入組件
QRadio
,
單選框(Radio)
<q-field label="黃金週去哪玩?" orientation="vertical"> <q-radio v-model="model" label="去杭州" val="hangzhou"/> <q-radio v-model="model" label="去北京" val="beijing"/> <q-radio v-model="model" label="去成都" val="chengdu"/> </q-field>
val
存儲綁定變量的值label
組件上的文字left-label
設定爲true
時,文字會改變顯示在選項的左邊checked-icon
改變選取時的iconunchecked-icon
改變未選取時的iconcolor
改變組件的顏色keep-color
沒選取時也會有顏色(默認是灰色)readonly
只讀屬性disable
禁用dark
在暗色背景時,凸顯組件文字no-focus
不會觸發聚焦事件@input
選取時觸發@blur
失去焦點(點到其餘地方)時觸發@focus
聚焦(點選該組件)時觸發複選框(Checkbox)
在quasai.config.js
中引入QCheckbox
。
複選框須要綁定數據類型爲Array
,也須要和QField
一塊兒使用。
val
數值,加入到v-model
綁定的變量中true-value
若是model
不是數組,在選取時會給model
值true
,用來取代true
false-value
同上解析indeterminate-value
用來替換null
toggle-indeterminate
使點擊可讓狀態在以上三個中轉換切換鍵Toggle
在quasar.config.js
中引入QToggle
val
,v-model
是Array
,會加在Array
內icon
若是底下兩個(checke-icon
、unchecked-icon
)icon 會被覆蓋掉選項組option-group
把選項寫進一個Array
中,而後直接用v-for
所有渲染出來。
每一步都是同樣的,在quasar.config.js
中引入QOptionGroup
。
CheckBox
<template> <q-field orientation="vertical" label="要選購的商品"> <q-option-group type="checkbox" v-model="model" :options="optionList" /> </q-field > </template> <script> export default { name: "index", data() { return { model: [], optionList: [ {label: '雞蛋', value: 'egg'}, {label: '海帶', value: 'seaweed'}, {label: '雞腿', value: 'lag'}, {label: '牛肉', value: 'beef'} ] } } } </script>
toggle
、radio
和checkbox
相似,只須要修改type
屬性值便可
時間日期輸入框Datetime,有Material和IOS兩種風格。
有兩個組件須要引入,一個是輸入時顯示,一個是默認就是顯示的。分別爲:
日期時間輸入Datetime Input
framework: { components: ['QDatetime'] }
日期時間選擇器Datetime Picker
framework: { components: ['QDatetimePicker'] }
// Datetime Input <q-datetime v-model="model" type="date"/> // Datetime Picker <q-datetime-picker v-model="model" type="date"/>
type
,一共有三個值,默認是date
date
單純日期time
單純時間datetime
時間+日期minimal
,不顯示標題min max
,設置可以選擇的日期時間範圍<q-datetime v-model="model" type="datetime" max="2019/02/27 2:30"/>
format-model
存儲的時間格式,有四種選擇:
auto
2019-02-27T12:01:00.000+08:00date
"2019-02-27T04:00:00.000Z"number
1541044860000string
2019-02-27T12:01:00.000+08:00format24h
設爲24時制的時鐘Input
show()
顯示輸入hide()
隱藏輸入toggle()
切換輸入clear()
清空modelPicker
setYear(val)
設置年setMonth(val)
設置月setDay(val)
設置日setHour(val)
設置時setMinute(val)
設置分setView(val)
設置要顯示的模式clear()
清空model編輯器(WYSIWYG)
在quasar.config.js
中引入QEditor
組件。
<q-editor v-model="model"/>
主要設置頁面的屬性有三個:
Toolbar
<q-editor v-model="model" :toolbar="[ ['bold','italic','strike','underline'], ['hr','link'], ['fullscreen'], ['print'] ]" />
Definitions
label
要顯示的文字icon
要顯示的icontip
小提示cmd
若是不想用默認的功能名稱,能夠用這個綁回你要的功能handler
自定義methods
的function
名稱save: { label:'保存', handler: functionName }
disable
禁用<q-editor v-model="model" :toolbar="[ ['bold','italic','strike','underline'], ['hr','link'], ['fullscreen'], ['print'] ]" :definitions="{ bold:{label:'粗體',icon:null,tip:'這是粗體'} }" />
Font
<q-editor v-model="model" :toolbar="[ ['arial','arial_black','comic_sans'], ]" :fonts="{ arial:'Arial', arial_black:'Arial Black', comic_sans:'Comic Sans MS' }" />
@input
輸入時觸發@fullscreen(true/false)
切換全屏時觸發旋轉按鈕(Knob)
在quasar.config.js
中引入QKnob
組件。
<q-knob v-model="model" :min="0" :max="25" > <q-icon class="q-mr-xs" name="volume_up"/> {{model}} </q-knob>
屬性
size
調整組件的大小,默認120px
step
數值的間距decimals
小數點顯示的位數min max
最小值和最大值color
、track-color
顏色、未到達的旋轉軸顏色line-width
線條的寬度,默認6px
事件
@input(val)
改變時當即觸發@change(val)
改變時觸發@drag-value(val)
拖動時就會觸發操做表(ActionSheet)
在quasar.config.js
中引入ActionSheet
組件,有Material和IOS兩種風格。
pluginS
形式
framework: { plugins: ['ActionSheet'] }
components
形式
framework: { components: ['QActionSheet'] }
Vue內
this.$q.actionSheet(configObj)
Vue外
import { ActionSheet } from 'quasar'; ActionSheet.create(configObj)
this.$q.actionSheet({ title: '操做選擇', grid: true, //使用格狀排版(一排三個) dismissLabel: '取消', //取消按鈕的文字 只有IOS主題下可用 默認是cancel actions: [ { label: '抓蟲', color: 'green', icon: 'fas fa-bug', handler() { console.log('抓蟲大師') } }, { label: '分享到微博', color: 'blue', icon: 'fas fa-weibo' }, { label: '請人幫忙', color: 'black', icon: 'fas fa-alipay' } ] }).then(action => {}).watch(() => {});
跟上面的操做基本上同樣,只是可以多監聽@show
和@hide
時間。
事件
@ok
點選選項時觸發@cancel
取消時觸發@show
顯示時觸發@hide
隱藏時觸發@escape-key
按Esc時觸發基本跟上面的Action Sheet同樣的操做方法。
this.$q.dialog({ title: '選擇主菜', message: '主廚精心特製主餐請選擇', color: 'red-13', ok: true, cancel: true, preventClose: true, //設置爲true,除非按cancel或是ok,否則不會關閉窗口 noBackdropDismiss: false, //按空白的地方不會關閉窗口 noEscDismiss: false, //按Esc不會關閉窗口 stackButtons: false, //爲true時會將ok/cancel按鈕垂直排列 position: 'top', //設置窗口顯示的位置 //使用input prompt: { mode: '頂級和牛帝王蟹', type: 'text' }, //使用option options:{ type:'radio', model:'beef', //默認的選項 items:[ {label:'絕對不加熱生牛排',value:'beef'}, {label:'極地冰山沙漠鮪魚',value:'tuna'}, {label:'超級漆黑山洞野豬肉',value:'pork'} ] } }).then(action => {}).watch(() => {});
在配置文件中引入QDialog
組件。
<q-dialog> <span slot="title">標題</span> <span slot="message">正文</span> <span slot="body">主體</span> <span slot="buttons">按鈕</span> </q-dialog>
模態框(Modal)
引入QModal
組件,另外加入directives
的CloseOverlay
。
使用按鈕或是method
將modal
設爲true
才能打開modal
。
全頁顯示
<q-btn @click="model=true">Open</q-btn> <q-modal v-model="model" content-css="padding: 50px" maximized> <h4>想去哪裏玩?</h4> <p>自由行·出國度假</p> <p>泰國、首爾、珠海、九寨溝</p> <q-btn class="q-mt-lg" color="primary" @click="model=false" label="訂購行程" /> </q-modal>
最小窗口minimized
設置position
後會自動清除content-css
定義的css
,因此要在裏面多一個div
來作padding
。
<q-modal v-model="model" minimized> <div style="padding: 20px"> ... </div> </q-modal>
minimized
,maximized
設置窗口最小化或是最大化no-route-dismiss
、no-esc-dismiss
、no-backdrop-dismiss
分別爲控制換頁、按下Esc、按黑色背景是否會觸發開閉事件content-css
,content-classes
,Modal內的CSS及class,在設置了position
後會無效position
設置彈窗出來的位置position-classes
設置position
後就要用這個來設class
,默認是items-center
,justify-center
transition
,enter-class
,leave-class
能夠用自定義的CSS來作出場的動畫no-refocus
是否讓關閉窗口時聚焦回到打開窗口前的最後一個組件控制打開關閉窗口的一些方法,要搭配this.$refs.窗口名稱
來使用。
show
hide
toggle
通知框(Notify)
this.$q.notify({ message: '已保存', timeout: 5000, // type:'positive', //自帶選項 color: 'grey', textColor: 'blue', icon: 'fas fa-warning', avatar: 'statics/images', //這個跟icon二選一 detail: '', position: 'top', actions: [ { label: '', icon: '', noDismiss: true, handler() { console.log('hello world'); } } ], onDismiss() { console.log('warning'); } });
import {Notify} from 'quasar'; Notify.create('已保存'); //方式二 Notify.create({ message: '已保存' });
Ajax欄(Ajax Bar)
在quasar.config.js
中引入QAjaxBar
組件。
由於在每一個頁面都會用到,因此放在最上層App.vue
。
<div id="q-app"> <router-view></router-view> <a-ajax-bar/> </div>
position
設置組件位置size
載入條的寬度,默認4px
color
默認red
reverse
使進度方向相反@start
開始動做時觸發@stop
結束動做時觸發start()
stop()
內部加載(Inner Loading)
使用InnerLoading時會做用在relative-position
這個class
下,若是沒有添加這個會變成整頁。
index.vue
<template> <q-page class="q-ma-lg"> <q-btn @click="$refs.myField.show()">Open</q-btn> <my-field class="relative-position" ref="myField"/> </q-page> </template> <script> import MyField from './MyField'; export default { name: 'PageIndex', components: { MyField } } </script>
MyField.vue
<template> <q-field label="跨年去哪玩?" orientation="vertical" > <q-radio v-model="model" label="去日本" val="japan" checked-icon="far fa-check-circle" keep-color/> <q-radio v-model="model" label="去韓國" val="korea" color="green" keep-color/> <q-radio v-model="model" label="在家待着" val="home" color="red" keep-color/> <q-inner-loading :visible="visible"> <q-spinner-gears size="50px" color="primary"></q-spinner-gears> </q-inner-loading> </q-field> </template> <script> export default { name: "MyField", data() { return { model: false, visible: false } }, methods: { show() { this.visible = true; setTimeout(() => { this.visible = false }, 5000) } } } </script>
效果
CSS間距類CSS Spacing Classes
q-ma-xs
q
做爲前綴ma
:
m
類型,margin
a
方向,all
xs
範圍的大小跟flex css
一致q-[類型][方向]-[大小]
類型
m
(margin
向外擴)p
(padding
向內擴)總共有7種選擇,除了基本的t(top)
,r(right)
,l(left)
、b(bottom)
,a(all)
以外,還有兩種x(left+right)
,y(top+bottom)
。
有none
,auto
(只能用在margin
),xs
,sm
,md
,lg
,xl
。
CSS陰影(立面圖)CSS Shadows
可視範圍CSS Visibility
CSS定位類CSS Positioning Classes
調色板(Color Palette)
在src/css/app.styl
文件中自定義全局CSS
.text-redsp color: #D03F38 .bg-redsp background: #D03F38
這裏text
和bg
須要同時設定。
<q-btn color="redsp">Open</q-btn>
多國語系(I18n)
在quasar.config.js
中設置:
framework: { i18n: 'zh-hans' }
let lang = this.#q.i18n.getLocal()
Quasar的切換語系不像是傳統的vue-i18n
直接換就能用,必須從新載入新語系的語系檔。
<template> <q-btn @click="setLang('zh-hans')">簡體中文</q-btn> </template> <script> export default { name: "I18n", methods: { setLang(lang) { import('quasar-framework/i18n/${lang}').then(lang => { this.$q.i18n.set(lang.default) }) } } } </script>
Vue-I18n在src/i18n
裏面,參照已經設定的內容添加本身想要的語系。
<p>{{$t('apple')}}</p>
<q-btn @click="setLang()" :label="$t('setting')"></q-btn>
methods: { setLang() { this.$i18m.local = 'zh-CN' } }