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

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

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

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

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

JavaScript

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

HTML

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

Q&A

1回答

331閲覧

Vue.jsにおける動的コンポーネントの書き方がわかりません。どう書いても思い通りに動作しないのですがどう書いたらいいですか?

sino3325

総合スコア65

Vue.js

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

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

JavaScript

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

HTML

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

1グッド

0クリップ

投稿2023/05/02 11:57

実現したいこと

Vue.jsの動的コンポーネントをちゃんと動くようにする。

現在のコード

現在は以下のコードの状態になっているのですが、動的コンポーネントとしてちゃんと切り替えることができていない点を解決したいです。
chromeのデベロッパーツールで見ると、
<button @click="toSecondComponent">SecondComponentにする</button>の部分を押せばちゃんと<component :is="curerntComponent">の部分が<secondcomponnet></secondcomponnet>に変わってくれるのですが、SecondComponnet.vueの中に書いた<template><p>SecondComponentの中身です</p></template>という文字列がページに出てきてくれません。
いろいろ調べても、どう修正したらいいのかわからなかったのでこちらで質問させていただきます。

vue.js

1<!--==================== template ====================--> 2<template> 3 <button @click="toFirstComponent">FirstComponentにする</button> 4 <button @click="toSecondComponent">SecondComponentにする</button> 5 6 <component :is="currentComponent" /> 7</template> 8 9<!--==================== script ====================--> 10<script setup> 11import { ref } from 'vue'; 12import FirstComponent from '../../components/FirstComponent.vue'; 13import SecondComponent from '../../components/SecondComponent.vue'; 14 15const currentComponent = ref('FirstComponent'); 16const toFirstComponent = () => { 17 currentComponent.value = 'FirstComponent'; 18}; 19const toSecondComponent = () => { 20 currentComponent.value = 'SecondComponent'; 21}; 22</script> 23 24<!--==================== style ====================--> 25<style scoped lang="scss"> 26 27</style>
KenRoda👍を押しています

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

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

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

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

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

guest

回答1

0

動的コンポーネントの切り替えがうまくいかない問題を解決するには、<script setup>内でコンポーネントを登録する必要があります。defineComponentcomponents オプションを使って、FirstComponentSecondComponent を登録してみましょう。

以下のように修正してみてください:

vue.js

1<!--==================== template ====================--> 2<template> 3 <button @click="toFirstComponent">FirstComponentにする</button> 4 <button @click="toSecondComponent">SecondComponentにする</button> 5 6 <component :is="currentComponent" /> 7</template> 8 9<!--==================== script ====================--> 10<script setup> 11import { ref } from 'vue'; 12import FirstComponent from '../../components/FirstComponent.vue'; 13import SecondComponent from '../../components/SecondComponent.vue'; 14import { defineComponent } from 'vue'; 15 16const currentComponent = ref('FirstComponent'); 17const toFirstComponent = () => { 18 currentComponent.value = 'FirstComponent'; 19}; 20const toSecondComponent = () => { 21 currentComponent.value = 'SecondComponent'; 22}; 23 24// コンポーネントの登録 25export default defineComponent({ 26 components: { 27 FirstComponent, 28 SecondComponent, 29 }, 30}); 31</script> 32 33<!--==================== style ====================--> 34<style scoped lang="scss"> 35 36</style> 37

上記の修正により、FirstComponentSecondComponent が正しく登録され、動的コンポーネントとして切り替えが正常に機能するはずです。問題が解決されることを願っています。

投稿2023/05/02 13:21

KenRoda

総合スコア30

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問