Vuetify와 Vue Router에서 반응 형 내비게이션을 만들었습니다.
17704 단어 vue-routerVue.jsvuetifyjs
소개
먼저 만든 것을 올려 둡니다.
데모
코드
사전 준비
VueCLI3을 설치하십시오.
【Vue】 프로젝트 만들기
terminal$ vue create vuetify-vuerouter-navbar-example
몇 가지 질문이 표시되므로
terminal
$ vue create vuetify-vuerouter-navbar-example
몇 가지 질문이 표시되므로
그 외는 기호로 부디
terminal
Vue CLI v3.7.0
┌───────────────────────────┐
│ Update available: 3.8.2 │
└───────────────────────────┘
? Please pick a preset:
default (babel, eslint)
❯ Manually select features
terminal
? Please pick a preset: Manually select features
? Check the features needed for your project:
◉ Babel
◯ TypeScript
◯ Progressive Web App (PWA) Support
❯◉ Router
◯ Vuex
◯ CSS Pre-processors
◉ Linter / Formatter
◯ Unit Testing
◯ E2E Testing
Vuetify 추가
프로젝트 바로 아래로 이동하여 Vuetify를 설치합니다.
terminal$ cd vuetify-vuerouter-navbar-example
$ vue add vuetify
사전 설정은 Default (recommended)를 선택하십시오.
terminal? Choose a preset:
❯ Default (recommended)
Prototype (rapid development)
Configure (advanced)
서버 시작
terminal$ yarn serve
http://localhost-8080.com/ 브라우저에서 열기
Welcome to Vuetify 문자가 나오면 괜찮습니다.
프로젝트 확인
plugins 디렉토리에 vuetify.js가 만들어졌습니다.
main.js에서 가져온 것 같습니다.
src/plugins/vuetify.jsimport Vue from "vue";
import Vuetify from "vuetify/lib";
import "vuetify/src/stylus/app.styl";
Vue.use(Vuetify, {
iconfont: "md"
});
src/main.jsimport Vue from "vue";
import "./plugins/vuetify";
// ... 略
구성 요소 만들기
여기에서 드디어 본제입니다.
Header.vue를 만들고 탐색 내용을 설명합니다.
src/components/Header.vue<template>
<div>
<v-navigation-drawer v-model="drawer" absolute temporary>
<v-list class="pa-1">
<v-list-tile avatar>
<v-list-tile-avatar>
<img src="https://randomuser.me/api/portraits/men/85.jpg" />
</v-list-tile-avatar>
<v-list-tile-content>
<v-list-tile-title>John Leider</v-list-tile-title>
</v-list-tile-content>
</v-list-tile>
</v-list>
<v-list>
<v-text-field
clearable
flat
label="Search"
prepend-inner-icon="search"
solo
single-line
hide-details
></v-text-field>
</v-list>
<v-list class="pt-0" dense>
<v-divider></v-divider>
<v-list-tile v-for="item in items" :key="item.title" :to="item.to">
<v-list-tile-action>
<v-icon>{{ item.icon }}</v-icon>
</v-list-tile-action>
<v-list-tile-content>
<v-list-tile-title>{{ item.title }}</v-list-tile-title>
</v-list-tile-content>
</v-list-tile>
</v-list>
</v-navigation-drawer>
<v-toolbar dark color="primary" clipped-left fixed app>
<v-toolbar-side-icon
@click.stop="drawer = !drawer"
class="hidden-md-and-up"
></v-toolbar-side-icon>
<v-toolbar-title class="headline text-uppercase white--text">
<span>Vuetify</span>
<span class="font-weight-light">MATERIAL DESIGN</span>
</v-toolbar-title>
<v-spacer></v-spacer>
<v-expand-x-transition>
<v-text-field
class="hidden-sm-and-down"
clearable
flat
label="Search"
prepend-inner-icon="search"
solo-inverted
single-line
hide-details
v-show="showSearchInput"
></v-text-field>
</v-expand-x-transition>
<v-toolbar-items class="hidden-sm-and-down">
<v-btn icon @click="showSearchInput = !showSearchInput">
<v-icon>search</v-icon>
</v-btn>
<v-btn flat to="/">Home</v-btn>
<v-btn flat to="/about">About</v-btn>
</v-toolbar-items>
</v-toolbar>
</div>
</template>
<script>
export default {
name: "Header",
data() {
return {
drawer: null,
showSearchInput: false,
items: [
{ title: "Home", icon: "dashboard", to: "/" },
{ title: "About", icon: "question_answer", to: "/about" }
]
};
}
};
</script>
네비게이션 및 사이드 패널
아래를 참고로 했습니다.
$ cd vuetify-vuerouter-navbar-example
$ vue add vuetify
? Choose a preset:
❯ Default (recommended)
Prototype (rapid development)
Configure (advanced)
$ yarn serve
plugins 디렉토리에 vuetify.js가 만들어졌습니다.
main.js에서 가져온 것 같습니다.
src/plugins/vuetify.js
import Vue from "vue";
import Vuetify from "vuetify/lib";
import "vuetify/src/stylus/app.styl";
Vue.use(Vuetify, {
iconfont: "md"
});
src/main.js
import Vue from "vue";
import "./plugins/vuetify";
// ... 略
구성 요소 만들기
여기에서 드디어 본제입니다.
Header.vue를 만들고 탐색 내용을 설명합니다.
src/components/Header.vue<template>
<div>
<v-navigation-drawer v-model="drawer" absolute temporary>
<v-list class="pa-1">
<v-list-tile avatar>
<v-list-tile-avatar>
<img src="https://randomuser.me/api/portraits/men/85.jpg" />
</v-list-tile-avatar>
<v-list-tile-content>
<v-list-tile-title>John Leider</v-list-tile-title>
</v-list-tile-content>
</v-list-tile>
</v-list>
<v-list>
<v-text-field
clearable
flat
label="Search"
prepend-inner-icon="search"
solo
single-line
hide-details
></v-text-field>
</v-list>
<v-list class="pt-0" dense>
<v-divider></v-divider>
<v-list-tile v-for="item in items" :key="item.title" :to="item.to">
<v-list-tile-action>
<v-icon>{{ item.icon }}</v-icon>
</v-list-tile-action>
<v-list-tile-content>
<v-list-tile-title>{{ item.title }}</v-list-tile-title>
</v-list-tile-content>
</v-list-tile>
</v-list>
</v-navigation-drawer>
<v-toolbar dark color="primary" clipped-left fixed app>
<v-toolbar-side-icon
@click.stop="drawer = !drawer"
class="hidden-md-and-up"
></v-toolbar-side-icon>
<v-toolbar-title class="headline text-uppercase white--text">
<span>Vuetify</span>
<span class="font-weight-light">MATERIAL DESIGN</span>
</v-toolbar-title>
<v-spacer></v-spacer>
<v-expand-x-transition>
<v-text-field
class="hidden-sm-and-down"
clearable
flat
label="Search"
prepend-inner-icon="search"
solo-inverted
single-line
hide-details
v-show="showSearchInput"
></v-text-field>
</v-expand-x-transition>
<v-toolbar-items class="hidden-sm-and-down">
<v-btn icon @click="showSearchInput = !showSearchInput">
<v-icon>search</v-icon>
</v-btn>
<v-btn flat to="/">Home</v-btn>
<v-btn flat to="/about">About</v-btn>
</v-toolbar-items>
</v-toolbar>
</div>
</template>
<script>
export default {
name: "Header",
data() {
return {
drawer: null,
showSearchInput: false,
items: [
{ title: "Home", icon: "dashboard", to: "/" },
{ title: "About", icon: "question_answer", to: "/about" }
]
};
}
};
</script>
네비게이션 및 사이드 패널
아래를 참고로 했습니다.
<template>
<div>
<v-navigation-drawer v-model="drawer" absolute temporary>
<v-list class="pa-1">
<v-list-tile avatar>
<v-list-tile-avatar>
<img src="https://randomuser.me/api/portraits/men/85.jpg" />
</v-list-tile-avatar>
<v-list-tile-content>
<v-list-tile-title>John Leider</v-list-tile-title>
</v-list-tile-content>
</v-list-tile>
</v-list>
<v-list>
<v-text-field
clearable
flat
label="Search"
prepend-inner-icon="search"
solo
single-line
hide-details
></v-text-field>
</v-list>
<v-list class="pt-0" dense>
<v-divider></v-divider>
<v-list-tile v-for="item in items" :key="item.title" :to="item.to">
<v-list-tile-action>
<v-icon>{{ item.icon }}</v-icon>
</v-list-tile-action>
<v-list-tile-content>
<v-list-tile-title>{{ item.title }}</v-list-tile-title>
</v-list-tile-content>
</v-list-tile>
</v-list>
</v-navigation-drawer>
<v-toolbar dark color="primary" clipped-left fixed app>
<v-toolbar-side-icon
@click.stop="drawer = !drawer"
class="hidden-md-and-up"
></v-toolbar-side-icon>
<v-toolbar-title class="headline text-uppercase white--text">
<span>Vuetify</span>
<span class="font-weight-light">MATERIAL DESIGN</span>
</v-toolbar-title>
<v-spacer></v-spacer>
<v-expand-x-transition>
<v-text-field
class="hidden-sm-and-down"
clearable
flat
label="Search"
prepend-inner-icon="search"
solo-inverted
single-line
hide-details
v-show="showSearchInput"
></v-text-field>
</v-expand-x-transition>
<v-toolbar-items class="hidden-sm-and-down">
<v-btn icon @click="showSearchInput = !showSearchInput">
<v-icon>search</v-icon>
</v-btn>
<v-btn flat to="/">Home</v-btn>
<v-btn flat to="/about">About</v-btn>
</v-toolbar-items>
</v-toolbar>
</div>
</template>
<script>
export default {
name: "Header",
data() {
return {
drawer: null,
showSearchInput: false,
items: [
{ title: "Home", icon: "dashboard", to: "/" },
{ title: "About", icon: "question_answer", to: "/about" }
]
};
}
};
</script>
애니메이션
<v-expand-x-transition>
에서 검색 박스의 표시 전환시에 애니메이션을 붙이고 있습니다.v-expand-x-transition
<v-expand-x-transition>
<v-text-field
class="hidden-sm-and-down"
clearable
flat
label="Search"
prepend-inner-icon="search"
solo-inverted
single-line
hide-details
v-show="showSearchInput"
></v-text-field>
</v-expand-x-transition>
브레이크 포인트
hidden-md-and-up
hidden-sm-and-down
에서 화면 사이즈에 따라 표시 전환을 하는 브레이크 포인트를 붙이고 있습니다.hidden-md-and-up
<v-toolbar-side-icon
@click.stop="drawer = !drawer"
class="hidden-md-and-up"
></v-toolbar-side-icon>
hidden-sm-and-down
<v-toolbar-items class="hidden-sm-and-down">
<v-btn icon @click="showSearchInput = !showSearchInput">
<v-icon>search</v-icon>
</v-btn>
<v-btn flat to="/">Home</v-btn>
<v-btn flat to="/about">About</v-btn>
</v-toolbar-items>
App.js에서 Header.vue 호출
src/App.vue
<template>
<v-app>
<Header />
<v-content>
<v-container fluid fill-height>
<v-layout justify-center align-center>
<router-view></router-view>
</v-layout>
</v-container>
</v-content>
</v-app>
</template>
<script>
import Header from "@/components/Header";
export default {
name: "App",
components: {
Header
}
};
</script>
자, 완성되었으므로 다시 http://localhost-8080.com/에 액세스하여 확인합시다.
이런 표시가 되어 있으면 OK입니다.
결론
끝까지 읽어 주셔서 감사합니다.
Vuetify는 Theme도 공개 된 것 같습니다.
그 중에는 무료 물건도있는 것 같기 때문에 시도해 보는 것은 어떻습니까?
Free / Premium Themes — Vuetify.js
Vue.js는 매우 힘들다 😁
Reference
이 문제에 관하여(Vuetify와 Vue Router에서 반응 형 내비게이션을 만들었습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/yousakamori/items/6b5def3f3c1d1aeff5a4
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(Vuetify와 Vue Router에서 반응 형 내비게이션을 만들었습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/yousakamori/items/6b5def3f3c1d1aeff5a4텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)