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

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

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

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

Q&A

解決済

2回答

745閲覧

Vue.jsにてHTML要素を挿入してバインディングしたい。

Anon_

総合スコア334

Vue.js

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

0グッド

1クリップ

投稿2021/06/17 05:13

WordPressのようなCMSだと直接HTMLを編集できないケースがあり、そのような場合にVue.jsのバインディング要素{{mess}}やv-modelをJSで挿入し、バインディングさせる方法はあるのでしょうか?
jQueryで{{}}を挿入してみましたが、案の定そのまま出力されてしまいました。

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

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

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

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

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

guest

回答2

0

サンプルコードを作ってみましたのでご確認ください。

前提

  • Vue-cliなどのツールではなくcdnサービスのVueを使ってます。

解説

  • 固定で配置されれている.hogeという要素の隣に#appという要素を追加してVueを当ててます。
  • VueインスタンスのtemplateプロパティにVueテンプレートを書きます。(サンプルではAppTemplateに格納してます)
  • その他コンポーネントの共通化などする場合は公式サイトをご確認くださいm(__)m
    https://jp.vuejs.org/v2/guide/components-registration.html

サンプル

html

1<!DOCTYPE html> 2<html lang="en"> 3<head> 4 <meta charset="UTF-8"> 5 <meta http-equiv="X-UA-Compatible" content="IE=edge"> 6 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 7 <title>唐突にVueアプリを誕生させる</title> 8 <script src="https://cdn.jsdelivr.net/npm/vue"></script> 9 <script> 10 window.addEventListener('DOMContentLoaded', (event) => { 11 12 // Vueアプリ用のDIV生成 13 const AppDiv = document.createElement('div'); 14 AppDiv.id = 'app'; 15 16 // Vueアプリ用のDIV追加 17 const target = document.querySelector('.hoge'); 18 target.parentNode.insertBefore(AppDiv, target.nextSibling); 19 20 // Vueテンプレート 21 const AppTemplate = 22 `<template> 23 {{ msg }} 24 </template>` 25 26 const App = new Vue({ 27 el: '#app', 28 data: { 29 msg: 'これはVue要素です' 30 }, 31 template: AppTemplate 32 }); 33 34 }); 35 </script> 36</head> 37<body> 38 <div class="hoge">↓↓↓↓ ここ下にVueアプリを描画 ↓↓↓↓</div> 39</body> 40</html>

投稿2021/06/17 20:08

runnynose

総合スコア497

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

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

Anon_

2021/06/29 23:42

AppTemplateはhoge要素のどこに出力されますか?
runnynose

2021/06/30 10:59 編集

今回のサンプルに関しては以下のコードにて、hoge要素の隣に出現します。回答にあるソースコードをhtmlファイルにしてブラウザで確認してみてください。 ``` target.parentNode.insertBefore(AppDiv, target.nextSibling) ``` どこに出現させるかはjavascriptの書き方次第なのでhoge要素の子要素として出力することも可能です。
Anon_

2021/07/07 16:01

insertBeforeってhoge要素の前ですよね? <div class="hoge">↓↓↓↓ ここ下にVueアプリを描画 ↓↓↓↓</div> とかかれていてhoge要素の中に出力されるような感じですが、そこはあまり気にしない方がいいですかね。
Anon_

2021/07/08 01:54

まったく新しい要素内で完結させるのではなく、複数の既存の要素の後ろに差し込みたい場合、どのようにする方法がいいと思われますか? el: '#app' ではなく el: 'body' などの全体を包括している要素を指定するとtemplateに指定した要素のみが表示されます。
guest

0

自己解決

できないということで解決しました。

投稿2022/04/06 05:42

Anon_

総合スコア334

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問