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

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

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

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

Q&A

解決済

2回答

1377閲覧

vue.jsでcomponentの位置を動的に変更する方法

Kimsehwa

総合スコア312

Vue.js

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

0グッド

1クリップ

投稿2019/05/07 09:57

vue.jsで動的にcomponentの位置を変更できるコードを作りたいと思ってます。

例えば、

/A
ページにアクセスすると

[banner,article,article2,nav]

/Bページにアクセスすると

[article,article2,banner]

のようなdynamicな順序でcomponentを表示したいです。

尚、ページによって使わないcomponentが発生するので
必要なときだけ使うようにdynamic importを考えてます。

ここまでの考えで実装したのが以下のコードです。

<template> <component :is="whichStep"></component> </template> <script> export default { components: { 'Article': () => import('../components/Article'), 'Article2': () => import('../components/Article2'), 'Banner': () => import('../components/Banner'), 'Nav': () => import('../components/Nav') }, computed: { whichStep () { switch (key_number) { case 0: return 'Article' case 1: return 'Article2' case 2: return 'Banner' case 3: return 'Nav' default: return 'Error' } } </script>

これからは

const key_number_list = [2,0,1,3] //[banner,article,article2,nav] const key_number_list = [0,1,2] //[article,article2,banner]

のような変数を作って(こちらはページによってjsonとかで受け取る予定)

<component :is="whichStep"></component>

この部分をkey_number_list配列のlengthほど生成して各値に該当するcomponentをreturnするような
方法を考えてますが、どう実装すればわからずこちらに質問します。

そもそもvue.jsでcomponentの位置を動的に変更させるにこの実装方法は正しいのかも伺いしたいです。

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

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

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

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

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

guest

回答2

0

ベストアンサー

render関数使えば実現できると思いますがrender関数はPromiseな返値を許容してくれないので、Dynamic Importの対応がめんどくさいことになりそう。

<component>v-forで複数配置する感じにすればいけますね。

vue

1<component v-for="item in items" :is="item" />

js

1//中略 2 computed: { 3 items() { 4 return key_number_list.map(n => getComponentName) 5 } 6 }

ただ一番手っ取り早いのはVue Router使って、ページごとに順番並び替えたコンポーネントを出し分ける方法かなと思います。

投稿2019/05/07 13:37

編集2019/05/07 13:47
yhg

総合スコア2161

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

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

Kimsehwa

2019/05/08 07:57 編集

ありがとうございます。おかげさまで方向性を掴みました。 A,Bのようなページが数十万個あり、Vue Routerを利用してページごとに順番並び替えを行うのは難しいと思いました。
guest

0

componentのis属性は1つのコンポーネントしか表示できないので
この実装方法は正しくないです。

投稿2019/05/07 13:20

yasutomi

総合スコア2937

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問