84
73

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

[Vue.js]クリックすると編集可能に切り替わるテキスト

Posted at

#はじめに

  • クリックすると編集可能に切り替わる
  • フォーカスを外すとテキストに戻る

わりとよくあるアレをvue.jsで

#デモ
https://jsfiddle.net/b44cqueg/2/

#説明

js

Vue.directive('auto-focus', {
  bind: function () {
  	var el = this.el;
    Vue.nextTick(function(){
    	el.focus();
    });
  }
});
  • このカスタムディレクティブは要素がレンダリングされたときに、対象の要素にフォーカスします。
  • bindした瞬間はまだ要素はレンダリングされていないので、Vue.nextTick()で待っています。
html
  <div v-if="!edit" v-text="value" v-on:click="edit = true"></div>
  <input v-if="edit" type="text" 
          v-model="value" v-on:blur="edit = false"  v-auto-focus>
  • レンダリングされたときにフォーカスするので、v-showではなくv-ifで切り替えています。

#コード全文

js

Vue.directive('auto-focus', {
  bind: function () {
  	var el = this.el;
    Vue.nextTick(function(){
    	el.focus();
    });
  }
})

new Vue({
    el: '#app',
    data: function(){
    	return {
      	value: 'Test',
        edit: false
      }
    }
})
html
<div id="app">
  <div class="text" v-if="!edit" v-text="value" v-on:click="edit = true"></div>
  <input v-if="edit" type="text" 
          v-model="value" v-on:blur="edit = false"  v-auto-focus>
</div>
84
73
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
84
73

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?