質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

Q&A

解決済

2回答

8971閲覧

ヘッダーフッターを実装したい Vue.js

harunasan

総合スコア125

Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

0グッド

1クリップ

投稿2018/01/17 02:23

編集2018/01/23 06:13

現在Vue.jsの学習をしていてVye.jsチュートリアル
を参考にCLIを基礎にして学習しています。

次にVue.jsで共通ヘッダーを作るを参考にApp.vueにヘッダーフッターを追加させました。

<template> <div id="app"> <app-header></app-header> <router-view></router-view> <app-footer></app-footer> </div> </template> <script> import Header from './components/Header/Header.vue'; import Footer from './components/Footer/Footer.vue'; export default { name: 'app', components: { 'app-header': Header, 'app-footer': Footer } }; </script> <style> body { margin: 0px; } #app { font-family: 'Avenir', Helvetica, Arial, sans-serif; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; text-align: center; color: #2c3e50; width: 375px; height: 667px; } </style>

ただこの表示の仕方だとすべてのページに反映しています、反映させたくないページ
が出てしまった時はどのようにソースを書いていけばいいでしょうか。
ご教授お願いいたします。

解決策として

<div class="home"> <app-header></app-header> <div class="home"> <button class="hogeBotann" @click="onClickStartButton()"></button> </div> <app-footer></app-footer> </div> <script> import Header from '../Header/Header.vue'; import Footer from '../Footer/Footer.vue'; export default { name: 'Title', methods: { onClickStartButton: function () { this.$router.push('hoge'); } }, components: { 'app-header': Header, 'app-footer': Footer } }; </script>

とHTMLに直接<app-header></app-header>記載したのですがもっとシンプルにできますでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

karamarimo

2018/01/19 03:35 編集

「すべてのページに反映しています」「反映させたくないページ」とは具体的に何が反映されるのでしょうか。
harunasan

2018/01/23 05:49

すいません遅くなりました、ヘッダーフッターがすべてのページにできてしまうのでログインページなどヘッダーフッターを省きたいと思っています、最新で回答がありますが、ルートをさらに作るとゆう考え方なのでしょうか?
guest

回答2

0

ベストアンサー

$route.path$route.nameで現在のルートが取得できますので、v-ifを用いてヘッダーとフッターの表示を制御すればいいと思います。

DEMO(codesandbox)

template

html

1 <my-header v-if="$route.name !== 'Login'"></my-header>

$route.nameが何で決まるかというと、Routerのコンストラクタのオプションroutesの各 route の nameフィールドです。

router/index.js

js

1export default new Router({ 2 routes: [ 3 { 4 path: '/', 5 name: 'Hello', 6 component: Hello 7 }, 8 { 9 path: '/login', 10 name: 'Login', 11 component: Login 12 } 13 ] 14})

投稿2018/01/23 08:12

karamarimo

総合スコア2551

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

harunasan

2018/01/23 09:57

おかげさまでヘッダーフッターを実装できました、vue.jsの流れが少しわかった気がします、 ありがとうございました。 <template> <div id="app"> <my-header v-if="$route.name !== 'Title'"></my-header> <router-view></router-view> <my-Footer v-if="$route.name !== 'Title'"></my-Footer> </div> </template> <script> import Header from '@/components/Header/Header'; import Footer from '@/components/Footer/Footer'; export default { name: 'app', components: { MyHeader: Header, MyFooter: Footer } }; </script>
guest

0

ヘッダーのあるページのコンポーネント、ないページのコンポーネントを作って、そこをrouterで呼ぶというのは?

投稿2018/01/19 14:37

TakahiroHayashi

総合スコア33

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

harunasan

2018/01/23 06:00

すません流れがよくわからないのですが、 index.js→main.js→App.vue→各自ページとゆう流れでいいんですよね? 考え方的にmain.jsに追加で記載していくのでしょうか? ルート import Vue from 'vue'; import Router from 'vue-router'; import hoge from '@/components/hoge/hoge'; import hoge2 from '@/components/hoge2/hoge2'; import hoge3 from '@/components/hoge3/hoge3; Vue.use(Router); export default new Router({ routes: [ {path: '/hoge', component: hoge}, {path: '/hoge2', component: hoge2}, {path: '/hoge3', component: hoge3}, // root {path: '/', component: Title} ] }); main.js import Vue from 'vue'; import App from './App'; import router from './router'; Vue.config.productionTip = false; /* eslint-disable no-new */ new Vue({ el: '#app', router, components: {App}, template: '<App/>' });
harunasan

2018/01/23 06:12

解決策として <div class="home"> <app-header></app-header> <div class="home"> <button class="hogeBotann" @click="onClickStartButton()"></button> </div> <app-footer></app-footer> </div> <script> import Header from '../Header/Header.vue'; import Footer from '../Footer/Footer.vue'; export default { name: 'Title', methods: { onClickStartButton: function () { this.$router.push('hoge'); } }, components: { 'app-header': Header, 'app-footer': Footer } }; </script> とHTMLに直接<app-header></app-header>記載したのですがもっとシンプルにできますでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問