2017-10-05 12 views
0

アイコンのようなものを持つボタンであるコンポーネントがあります。私はこのようにそれを使用します。vue:定義内の小道具を変換する

<ti-btn icon="..." @click.native="..."></ti-btn> 

も、私は必要とされていない小道具を渡すことができ、この小道具サイズ、数です。

<ti-btn icon="..." size="32" @click.native="..."></ti-btn> 

は今、私のコンポーネントの定義では、最初に、私が書いた:

<template> 
    <i :class="icon" :style="{fontSize}"></i> 
</template> 
<script> 
export default { 
    props: ['icon', 'size'], 
    computed: { 
     fontSize() { 
      return this.size ? `${this.size}px` : DEFAULT_SIZE; 
     } 
    } 
} 
</script> 

サイズが受け継がれていない場合、私はデフォルト値を設定します。それはうまくいっていますが、良いプラクティスとvueスタイルのガイドによれば、プロップの定義はできるだけ詳しく記述する必要があります。だから、私はこの方法を使用することを開始しました:

props: { 
    icon: { 
     type: String, 
     required: true, 
     validate(value){ 
      //some kind of validation here 
      return value.includes('ti') 
     } 
    }, 
    size: { 
     type: Number, 
     required: false, 
     default: DEFAULT_SIZE 
    } 
} 

サイズは小道具を受け、しかし、それは文字列を返す必要があり、実際にはDEFAULT_SIZE文字列である「24ピクセル」に設定されていますまた、受信値は値+ "px"に変換されます。ですから、私の質問は、計算されたプロパティを使用せずに、独自の定義オブジェクトでサイズpropをどのように変換できますか?

+0

私はあなたができるとは思わない:**小道具は、どの引数/パラメータが**で渡すことができるかを指示するインターフェイスとしてのみ機能し、それの受け入れられる型/形式は何か。受信データを変換する機能はありません。計算された小道具として、またはテンプレート自体の中で、文字列の補間に頼らなければなりません。私は 'DEFAULT_SIZE'を一貫性の酒の数として設定し、実際のピクセルサイズを計算/補間するべきだと言います。 – Terry

+0

ここで計算されたプロパティが正しいアプローチです。 – Bert

答えて

0

コメントで述べたように、propの値をpropの定義自体からコンポーネントに変換する方法を提供することはできません。

あなたはsizeがちょうどNumberなりましょう、そしてあなたはstyleにバインドするときに'px'を追加することができます。

<i :class="icon" :style="{ fontSize: `${size}px` }"></i> 

これは、あなたが24からDEFAULT_SIZEが同じにする必要があると思います意味します。


DEFAULT_SIZEの値を変更できない場合は、次に、fontSizeの計算されたプロパティの例は、問題を処理する正しい方法です。

+0

なぜdownvote? – thanksd

関連する問題