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

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

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

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

JavaScript

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

Q&A

解決済

1回答

2285閲覧

Vue.jsで、v-focusを特定条件のときだけ付与したい

jammer

総合スコア14

Vue.js

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

JavaScript

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

0グッド

0クリップ

投稿2020/07/13 03:40

編集2020/07/13 03:46

Vue.jsにて、v-forループでinput要素を複数描画しているのですが、
その最初の要素にだけv-focusを付与したいのですが、適切な書き方を教えて下さい。

以下のコードのv-focusを、key==0のときだけ付与したいです。
どのように条件を書けばよいでしょうか?

vue

1<ul> 2<li v-for="(val, key) in models"> 3<input type="text" v-model="abc" v-focus /> 4</li> 5</ul>

今自分では、

vue

1<ul> 2<li v-for="(val, key) in models"> 3<input type="text" v-model="abc" v-focus v-if="key==0" /> 4<input type="text" v-model="abc" v-if="key!=0" /> 5</li> 6</ul>

こんな書き方をしていて、きれいに書きたいです。

v-focusは、

vue

1root.Vue.directive('focus', { 2 inserted: function (el) { 3 el.focus(); 4 } 5});

これです。

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

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

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

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

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

sousuke

2020/07/13 03:51

v-focusはカスタムディレクティブだと思います。その関数部分を提示したほうがいいのでは?
jammer

2020/07/13 03:55

ご指摘ありがとうございました。
guest

回答1

0

ベストアンサー

改善方法の1例ですが参考になれば幸いです。

この例ではv-focusディレクティブを下記のように修正します。
コードの通りsetという引数を取るようにします。(引数名はなんでもいいです)
そして引数の値がundefinedかtrueの場合にフォーカスするようにします。

javascript

1Vue.directive('focus', { 2 inserted: function (el, binding) { 3 if (binding.arg === 'set') { 4 if (binding.value === undefined || binding.value === true) { 5 el.focus() 6 } 7 } 8 } 9})

v-focusディレクティブの使い方は下記のようになります。
v-focus:setとした最初の要素がフォーカスされます。

<ul> <li> <input type="text" v-focus:set /> </li> <li> <input type="text" v-focus /> </li> <li> <input type="text" v-focus /> </li> <li> <input type="text" v-focus /> </li> </ul>

v-focus:setの部分はv-focus:set="true" or v-focus:set="false"のようにbooleanを渡せます。
なので、ループの中で最初(0番目)のinput要素をフォーカスしたい場合は、下記のように記述できます。

<ul> <li v-for="(val, key) in models" :key="key"> <input type="text" v-focus:set="key === 0" /> </li> </ul>

投稿2020/07/13 06:38

rubytomato

総合スコア1752

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

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

jammer

2020/07/13 06:57

ありがとうございます!まさにこのようにやりたかった内容です!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問