LoginSignup
8
14

More than 5 years have passed since last update.

[Vue.js] ディレクティブと式のTips

Last updated at Posted at 2017-04-16

一つのv-onに2つのメソッドを指定する

<button @click="foo() + bar()">ボタン</button>

このように+で繋ぐとクリック時にfoo()bar()の2つのメソッドが発火します。
+が特別な意味を持つというわけではなく*でも-でも同じで、JavaScript式として普通に評価されるためです。
短絡評価を使って、@click="disabled || foo()"などのように書くことも出来ます。

$emitの引数をv-on内の式で直接処理する

$emit('nice-event','foo!!!','bar???')とイベントを発火するとき、
Vue2.0初期のドキュメントでは、v-on:nice-event="foo = arguments[0];foo = arguments[1];"というやり方が書かれていましたが、
現在は次のようにアロー関数で書くことが推奨されてるみたいです。

<my-component 
v-on:nice-event="(x,y)=>{ 
    foo = x; 
    bar = y; 
}"
></my-component>

標準ビルトインオブジェクトが使用できる

<p v-if="Math.random() > 0.5">気まぐれに表示</p>

MathDateなどホワイトリストに登録されている標準のグローバルオブジェクトを式の中で使用できます。
で、そのホワイトリストはどこなんだって話ですが、ここです。
const allowedGlobalsってやつですね。

requireが使用できる

<p>{{require('util').formatDate(date,'MM月dd日')}}</p>

ホワイトリスト見てもらえばわかりますが、実はrequireも使えます。
汎用的なテキスト関数は、Vueのグローバルに登録するのは嫌だし、mixinで毎回登録するのも億劫で、個人的にはよくエイリアス張ってrequireを使ってます。

v-bindに直接オブジェクトが渡せる

<p v-bind="{
  class:['aaa','bbb','ccc'],
  style:"color:red",
  id:'main'
}">test</p>

v-bind:class=""とやるのが推奨されていますが、v-bindに直接オブジェクトを渡すこともできます。
優先度はオブジェクトで渡したほうが高いみたい。
使い道としては、不定な属性名を使いたいときや、属性を付けたり消したりしたいときとか?

v-bindでDomのプロパティを操作する

<p v-bind:inner-html.prop="'baz'"></p>

.prop修飾子を使うと属性ではなくDOMのプロパティに対してバインディングできます。
vue.jsだけ使ってる場合にはあまり意味はないですが、他のライブラリと組み合わせる時、どうしても必要になったりします。

8
14
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
8
14