ホームページ  >  記事  >  ウェブフロントエンド  >  Vue で Evernote のようなページデザインを実装するにはどうすればよいですか?

Vue で Evernote のようなページデザインを実装するにはどうすればよいですか?

王林
王林オリジナル
2023-06-25 17:43:401097ブラウズ

Vue は、最新の Web アプリケーションの構築に使用できる人気のある JavaScript フレームワークです。 Vue は、リッチなインタラクティブ UI を開発する簡単な方法を提供するため、多くの開発者の間で人気が高まっています。 Evernote は、多くの機能を提供し、非常にユニークなインターフェイス設計を備えたよく知られたメモ作成アプリケーションです。この記事では、Vueを使ってEvernote風のページデザインを実現する方法を紹介します。

  1. Vue アプリケーションの作成

まず、新しい Vue アプリケーションを作成する必要があります。 Vue CLI を使用して、ターミナルで次のコマンドを実行するだけで、基本的な Vue アプリケーションを作成できます。

vue create my-app

これにより、「my-app」という名前の新しい Vue アプリケーションが作成されます。

  1. 必要な依存関係をインストールする

目標を達成するには、いくつかの必要な依存関係をインストールする必要があります。次のコマンドを使用してインストールします。

npm install vue-router vuex vue-fontawesome bootstrap-vue

これにより、Vue-router、Vuex、FontAwesome、Bootstrap-Vue などの必要な依存関係がインストールされます。

  1. ページ レイアウトの構築

次に、アプリケーションで使用する基本的なページ レイアウトを作成します。 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>
  1. ルーティングと Vuex 状態管理を追加します
# #さて、ルーティングと Vuex 状態管理をアプリケーションに追加する必要があります。 Vuex を使用してノートブックとタグを保存し、ルーティングを使用してノートブックの詳細ページにジャンプします。

最初にいくつかの定数を設定する必要があります。

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>

    Done
これで、Vue アプリケーションが完成しました。 Evernoteを模したページデザインが実装されています。コンポーネントとルーティングを使用して左側のサイドバーとノートの詳細ページを実装し、Vuex 状態管理を使用してノートブック、ノート、タグを保存します。また、FontAwesome と Bootstrap-Vue を使用して UI を最適化しました。この Vue アプリケーションに基づいて、さらに多くのスタイルと機能を追加および拡張できます。

以上がVue で Evernote のようなページデザインを実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。