Значення за замовчуванням для реквізиту компонента 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

Vueдозволяє вам вказати propзначення за замовчуванням та typeбезпосередньо, зробивши реквізит об'єктом (див. https://vuejs.org/guide/components.html#Prop-Validation ):

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

Якщо переданий неправильний тип, він видає помилку і записує її в консоль, ось загадка:

https://jsfiddle.net/cexbqe2q/


2
Як щодо другого питання (це більше питання JavaScript): який найкращий спосіб перевірити, чи користувач не встановив реквізит? Це хороший спосіб: if (this.year != null) чи, можливо, це: if (!this.year)чи? Дякую!
PeraMika

1
Якщо ви встановите значення за замовчуванням, опора завжди буде встановлена, якщо ви не встановите значення за замовчуванням null. Якщо це те, що вам потрібно виконати якусь іншу логіку, if (this.year != null)або if (!this.year)це шлях.
craig_h

36

Це старе питання, але щодо другої частини питання - як ви можете перевірити, чи користувач встановив / не встановив опору?

Оглядаючи thisвсередині компонента, ми маємо this.$options.propsData. Якщо опора присутня тут, користувач явно встановив її; значення за замовчуванням не відображаються.

Це корисно в тих випадках, коли ви не можете реально порівняти значення з його замовчуванням, наприклад, якщо опора є функцією.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.