Vueコンポーネントの小道具のデフォルト値&ユーザーが小道具を設定していないかどうかを確認する方法


139

1. Vue 2のコンポーネントプロップのデフォルト値を設定するにはどうすればよいですか?たとえば、次のmoviesように使用できる単純なコンポーネントがあります。

<movies year="2016"><movies>



Vue.component('movies', {
    props: ['year'],

    template: '#movies-template',
    ...
}

ただし、ユーザーが指定しない場合year

<movies></movies>

次に、コンポーネントはyearプロップのデフォルト値を取ります。

2.また、ユーザーが小道具を設定しなかったかどうかを確認する最良の方法は何ですか?これは良い方法ですか?

if (this.year != null) {
    // do something
}

または多分これ:

if (!this.year) {
    // do something
}

回答:


231

Vuepropsをオブジェクトにすることで、デフォルトprop値をtype直接指定することができます(https://vuejs.org/guide/components.html#Prop-Validationを参照):

props: {
  year: {
    default: 2016,
    type: Number
  }
}

間違ったタイプが渡されると、エラーがスローされ、コンソールに記録されます。ここにフィドルがあります。

https://jsfiddle.net/cexbqe2q/


2
2番目の質問はどうですか(これはJavaScriptの質問です):ユーザーが小道具を設定しなかったかどうかを確認する最良の方法は何ですか?これは良い方法ですか:if (this.year != null) または多分これ:if (!this.year)または?ありがとう!
PeraMika 2016年

1
デフォルト値を設定した場合、デフォルトをに設定しない限り、プロップは常に設定されますnull。それはあなたには、いくつかの他のロジックを実行するために必要なものである場合if (this.year != null)、またはif (!this.year)移動するための方法です。
craig_h 2016年

36

これは古い質問ですが、質問の2番目の部分に関して-ユーザーが小道具を設定したかどうかを確認するにはどうすればよいですか?

検査this構成要素の中に、私たちは持っていますthis.$options.propsData。ここに小道具がある場合、ユーザーは明示的に設定します。デフォルト値は表示されません。

これは、実際に値をデフォルトと比較できない場合、たとえば、propが関数である場合に役立ちます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.