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

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

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

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

HTML

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

Q&A

解決済

1回答

35141閲覧

(vue.js) inputフォームの初期値(value属性)を、vueのdataの内容にしたい

morguri

総合スコア46

Vue.js

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

HTML

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

0グッド

3クリップ

投稿2018/11/24 09:42

編集2018/11/24 13:46

実現したいこと

以下のようなinputフォームのvalue属性の内容を、vueのデータにすることはできないでしょうか。(初期値だけなので、連動はしなくてもよいです)

<input type="text" id="name" v-model="name" value="ここの初期値をdataのnameにしたい"/>

詳細

現在、vuejsにてあるコンポーネントを作成しています。

アイテムリストページがあり、アイテム名をクリックすると
編集ページに飛ぶというもので、その編集ページについてです。

編集ページにはアイテムの情報入力用のinput要素があり
そのinput要素の初期値(value属性)はアイテムリストページにて
クリックされたアイテムの情報が入力されているようにしたいです。
(アイテムリストと編集ページは親子関係にはありません)

そのままですが、当該の部分のコードです。

vue

1//template 2<input 3 type="text" 4 id="name" 5 v-model="name" //双方向でなくていいのでv-bindでよいかもしれません 6 value="ここの初期値をdataのnameにしたい" //value="{{name}}"にするとビルドエラー 7/> 8 9//script 10data() { 11 return { 12 name:'', //ここにはaxiosにて取得したアイテム名が入っています。 13 } 14},

このコンポーネントが作成された際に、createdでaxiosを使いアイテムのデータ取得できています。
(画面上部には、アイテム名が表示される部分があり、そこにはクリックされたアイテム名が表示されています)

ご存知の方いましたら、よろしくお願いします。

情報を追加させて頂きます。

vue

1created(){ 2 this.fetchItem() 3 }, 4methods:{ 5 fetchItem(){ 6 const token = localStorage.getItem('token'); 7    //JWT認証を使用しているためヘッダーにトークンをつけて送る必要があります 8 axios.get('/api/items/users/' + this.$store.state.user.id + '/' + this.$route.params.id, { headers: { Authorization: `Bearer ${token}` } }) 9 .then(res => { 10 this.name = res.data.name //ここでnameにレスポンスデータがセットされます 11 }) 12 .catch(err => { 13 this.message = err.data.statusText; 14 }) 15 },

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

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

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

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

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

NozomuIkuta

2018/11/24 11:24

Vue Routerは使用していますか。また、Vuexは使用していますか。
morguri

2018/11/24 11:50

Vue Router、Vuexともに利用しています。先ほどinputじゃなくて<textarea v-model="name"></textarea>ならいけるかなと思い試してみましたがダメでした
NozomuIkuta

2018/11/24 12:29

URLは編集するアイテムによって変わっていいですか?共通ですか?
morguri

2018/11/24 13:24

現在は編集アイテムごとにURLは異なる形になっているのでURLが変わる方が分かりやすいです。(リストページに載っている各アイテムのリンク<router-link>は/api/item/edit/(id)となっている形です。editページではcreatedでaxiosを使ってthis.$route.params.idを用いてサーバより対象データを取得しています)
NozomuIkuta

2018/11/24 13:35

created()の部分を載せていただきたいです。
morguri

2018/11/24 13:47

すみません、先ほどcreatedの部分を載せました。質問にも記載しましたが、必要なデータが取れていることは確認できています。
guest

回答1

0

ベストアンサー

value="ここの初期値をdataのnameにしたい" //value="{{name}}"にするとビルドエラー

:value="name"v-bind:value="name"で動きませんか?
その場合、v-modelは消してください。

投稿2018/11/24 14:13

NozomuIkuta

総合スコア1260

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

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

morguri

2018/11/24 14:49 編集

:value="name"にしたところ、出来ました! ただ、v-modelが使えないということで、input要素に入力したデータをvue側のデータのnameに反映させるために <input type="text" id="name" :value="name" @input="name = $event.target.value"/> としました。 v-modelはbindとonの糖衣構文であることは知っていたのですが このようなケースの時に分けて使うのかーという点も勉強になりました。 この度はありがとうございました!
NozomuIkuta

2018/11/24 15:41

解決したようでよかったです。 ちなみに、`:value="name"`を消して`v-model="name"`だけでも動きませんか?
morguri

2018/11/25 00:23

:value消して、v-modelだけにしたところ動きました(泣) v-modelだけのパターンは一番最初にやってダメだった記憶があり、それで「あぁ、値をいじるにはvalue属性変えないといけないのか~」と思い、色々やってみたというところです。 色々お手数おかけしました。
NozomuIkuta

2018/11/25 01:17

`v-model`は、デフォルトだと`value`を`input`イベントで監視・更新するシュガーシンタックスです。 エラーだったのは、`v-model`と`value`を併記したことと、`value="{{name}}"`で構文ルールから逸脱したためだと思います。"{{ expression }}"は、式の結果をテキストとして出力するためのものなので。最初に`v-model`だけでダメだったのは、スペリングミスか何かかもしれません。 いずれにせよ、解決したようでよかたったです。 ではまた
morguri

2018/11/25 01:31

他のコンポーネントを見ていて気づいたのですが、最初に試した時は、 <input type="text" v-model="name" @focus="messageClear"/>となっており、しかもそのmessageClearメソッドは未定義でした。なので、v-modelで反映されなかったのは、input要素に未定義のメソッドを記載していたことでした。methodsにmessageClearを定義したら上記の文でも反映されます。 ほぼ同じ内容の他コンポーネントからのコピペで作ったこともあり、消すべき部分を消していなかったことと 一旦無駄なものはすべて省いて、最小構成で動作確認するという基本が抜けていました。 長々とすみませんが、ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問