ホームページ > 記事 > ウェブフロントエンド > Vue で Evernote のようなページデザインを実装するにはどうすればよいですか?
Vue は、最新の Web アプリケーションの構築に使用できる人気のある JavaScript フレームワークです。 Vue は、リッチなインタラクティブ UI を開発する簡単な方法を提供するため、多くの開発者の間で人気が高まっています。 Evernote は、多くの機能を提供し、非常にユニークなインターフェイス設計を備えたよく知られたメモ作成アプリケーションです。この記事では、Vueを使ってEvernote風のページデザインを実現する方法を紹介します。
まず、新しい Vue アプリケーションを作成する必要があります。 Vue CLI を使用して、ターミナルで次のコマンドを実行するだけで、基本的な Vue アプリケーションを作成できます。
vue create my-app
これにより、「my-app」という名前の新しい Vue アプリケーションが作成されます。
目標を達成するには、いくつかの必要な依存関係をインストールする必要があります。次のコマンドを使用してインストールします。
npm install vue-router vuex vue-fontawesome bootstrap-vue
これにより、Vue-router、Vuex、FontAwesome、Bootstrap-Vue などの必要な依存関係がインストールされます。
次に、アプリケーションで使用する基本的なページ レイアウトを作成します。 baa33d726332c2507b5c03acc8849f8f
コンポーネントと 198795fd54a215f0ecfa19e7b29c2ffb
コンポーネントを使用して、左側のサイドバーを作成します。このサイドバーは、ノートブックとタグを含むリストとして表示されます。右側で、メモの詳細を表示する「NoteView」というコンポーネントを作成します。
アプリケーションのメイン コンポーネントには、次のコードを使用してこれらのコンポーネントを含めることができます:
<template> <div> <navbar /> <div class="container-fluid mt-5"> <div class="row"> <sidebar /> <note-view /> </div> </div> </div> </template> <script> import Navbar from '@/components/Navbar.vue' import Sidebar from '@/components/Sidebar.vue' import NoteView from '@/components/NoteView.vue' export default { components: { Navbar, Sidebar, NoteView } } </script> <style> /* Visit https://bootstrap-vue.js.org/docs/ for BootstrapVue documentation and examples */ </style>
src/store/index.js ファイルに次のコードを追加できます:
export const SET_NOTEBOOKS = 'SET_NOTEBOOKS' export const SET_NOTES = 'SET_NOTES' export const SET_TAGS = 'SET_TAGS' export const SET_ACTIVE_NOTEBOOK = 'SET_ACTIVE_NOTEBOOK' export const SET_ACTIVE_NOTE = 'SET_ACTIVE_NOTE' export const ADD_NOTEBOOK = 'ADD_NOTEBOOK' export const ADD_NOTE = 'ADD_NOTE' export const ADD_TAG = 'ADD_TAG'次に、定義します。 Vuex の状態を管理し、これらの状態を管理するためのストレージ ファイルを作成します。
src/store/state.js ファイルに、次のコードを追加できます。
export default { notebooks: [], notes: [], tags: [], activeNotebook: null, activeNote: null }次に、アクションとミューテーションを設定して、ノートブックとノートを更新する必要があります。店。
src/store/mutations.js ファイルに次のコードを追加できます。
import { SET_NOTEBOOKS, SET_NOTES, SET_TAGS, SET_ACTIVE_NOTEBOOK, SET_ACTIVE_NOTE, ADD_NOTEBOOK, ADD_NOTE, ADD_TAG } from './index' export default { [SET_NOTEBOOKS](state, notebooks) { state.notebooks = notebooks }, [SET_NOTES](state, notes) { state.notes = notes }, [SET_TAGS](state, tags) { state.tags = tags }, [SET_ACTIVE_NOTEBOOK](state, notebook) { state.activeNotebook = notebook }, [SET_ACTIVE_NOTE](state, note) { state.activeNote = note }, [ADD_NOTEBOOK](state, notebook) { state.notebooks.push(notebook) }, [ADD_NOTE](state, note) { state.notes.push(note) }, [ADD_TAG](state, tag) { state.tags.push(tag) } }
src/store/actions.js ファイルでは、次のコードを追加できます。次のコードを追加します:
import axios from 'axios' import { SET_NOTEBOOKS, SET_NOTES, SET_TAGS, SET_ACTIVE_NOTEBOOK, SET_ACTIVE_NOTE, ADD_NOTEBOOK, ADD_NOTE, ADD_TAG } from './index' const api = 'https://my-json-server.typicode.com/abhinav1507/demo' export default { getNotebooks({ commit }) { axios.get(`${api}/notebooks`).then(response => { commit(SET_NOTEBOOKS, response.data) }) }, getNotes({ commit }) { axios.get(`${api}/notes`).then(response => { commit(SET_NOTES, response.data) }) }, getTags({ commit }) { axios.get(`${api}/tags`).then(response => { commit(SET_TAGS, response.data) }) }, setActiveNotebook({ commit }, notebook) { commit(SET_ACTIVE_NOTEBOOK, notebook) }, setActiveNote({ commit }, note) { commit(SET_ACTIVE_NOTE, note) }, addNotebook({ commit }, notebook) { axios.post(`${api}/notebooks`, notebook).then(response => { commit(ADD_NOTEBOOK, response.data) }) }, addNote({ commit }, note) { axios.post(`${api}/notes`, note).then(response => { commit(ADD_NOTE, response.data) }) }, addTag({ commit }, tag) { axios.post(`${api}/tags`, tag).then(response => { commit(ADD_TAG, response.data) }) } }次に、
src/router/index.js ファイルで、アプリケーション内を移動するためのルートを設定する必要があります。次のコードを追加できます:
import Vue from 'vue' import Vuex from 'vuex' import VueRouter from 'vue-router' import Home from '@/views/Home.vue' import Notebook from '@/views/Notebook.vue' Vue.use(VueRouter) Vue.use(Vuex) const routes = [ { path: '/', name: 'Home', component: Home }, { path: '/notebook/:id', name: 'Notebook', component: Notebook } ] const router = new VueRouter({ routes }) export default router
198795fd54a215f0ecfa19e7b29c2ffb コンポーネントを使用して、左側のサイドバーを実装します。 。このコンポーネントでは、ノートブックとタブを、ノートブックまたはタブを追加するオプションとともに表示します。これらの要素を区別するために、FontAwesome のアイコンも使用します。次のコードを
src/components/Sidebar.vue ファイルに追加できます:
<template> <div class="col-lg-3"> <div class="d-flex justify-content-between align-items-center mb-4"> <h5 class="m-0">Notebooks</h5> <b-button variant="primary" size="sm"> <font-awesome-icon :icon="['fas', 'plus']" /> Add </b-button> </div> <b-list-group> <b-list-group-item v-for="notebook in notebooks" :key="notebook.id"> <router-link :to="{ name: 'Notebook', params: { id: notebook.id}}"> <font-awesome-icon :icon="['fas', 'book-open']" /> {{ notebook.title }} </router-link> </b-list-group-item> </b-list-group> <div class="d-flex justify-content-between align-items-center mt-4"> <h5 class="m-0">Tags</h5> <b-button variant="primary" size="sm"> <font-awesome-icon :icon="['fas', 'plus']" /> Add </b-button> </div> <b-list-group> <b-list-group-item v-for="tag in tags" :key="tag.id"> <font-awesome-icon :icon="['fas', 'tag']" /> {{ tag.title }} </b-list-group-item> </b-list-group> </div> </template> <script> import { mapGetters } from 'vuex' export default { computed: { ...mapGetters({ notebooks: 'notebooks', tags: 'tags' }) } } </script>
NoteView コンポーネントのノートブック詳細ページを実装します。このコンポーネントでは、ノートブックのタイトルとコンテンツをレンダリングします。また、ユーザーがメモを追加できるように、ノートブックの下部にテキスト ボックスを追加します。次のコードを
src/components/NoteView.vue ファイルに追加できます:
<template> <div class="col-lg-9"> <div class="d-flex justify-content-between align-items-center mb-4"> <router-link :to="{ name: 'Home'}" class="btn btn-secondary"> <font-awesome-icon :icon="['fas', 'arrow-left']" /> Back </router-link> <b-form-group label="Notebook" label-for="notebook"> <b-form-select v-model="activeNotebook" :options="notebooks" id="notebook" /> </b-form-group> </div> <div class="card"> <div class="card-header"> <input type="text" class="form-control" placeholder="Title"> </div> <div class="card-body"> <textarea class="form-control" placeholder="Note"></textarea> </div> </div> </div> </template> <script> import { mapGetters, mapActions } from 'vuex' export default { computed: { ...mapGetters({ notebooks: 'notebooks', activeNotebook: 'activeNotebook' }) }, methods: { ...mapActions({ setActiveNotebook: 'setActiveNotebook' }) }, created() { if (!this.activeNotebook && this.notebooks.length) { this.setActiveNotebook(this.notebooks[0]) } } } </script>
以上がVue で Evernote のようなページデザインを実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。