ОШИБКА: введите 'Observable < {} [] >' нельзя назначить типу AngularFireList < any [] > '. ионный

Проблема

Вы используете значение i , как если бы это был индекс массива. Это не так, потому что SAMPLE1 и SAMPLE2 являются отдельными переменными, а не массивом.

Кроме того, при вызове echo SAMPLE{$i} вы добавляете значение i к слову "ОБРАЗЕЦ." Единственная переменная, которую вы разыгрываете в этом выражении, - $ i, поэтому вы получили результаты, которые вы сделали.

Способы решения проблемы

Существует два основных способа решения этой проблемы :

  1. Многоступенчатое разыменование интерполированной переменной через расширение косвенной переменной eval builtin или .
  2. Итерация по массиву или использование i как индекс в массив.

Разыменование с помощью eval

Самое простое в этом дело ситуация заключается в использовании eval :

SAMPLE1='1-first.with.custom.name'
SAMPLE2='2-second.with.custom.name'

for (( i = 1; i <= 2; i++ )); do
    eval echo \$SAMPLE${i}
done

Это добавит значение i в конец переменной и затем обработает результирующую строку , расширяя имя интерполированной переменной (например, SAMPLE1 или SAMPLE2 ).

Разбор с косвенными переменными

Принятый ответ для этого вопрос:

SAMPLE1='1-first.with.custom.name'
SAMPLE2='2-second.with.custom.name'

for (( i = 1; i <= 2; i++ ))
do
   var="SAMPLE$i"
   echo ${!var}
done

Это технически трехэтапный процесс. Во-первых, он присваивает имя интерполированной переменной var , затем разделяет имя переменной, хранящуюся в var , и, наконец, расширяет результат. Это выглядит немного чище, и некоторые люди более удобны с этим синтаксисом, чем с eval , но результат в основном тот же.

Итерация по массиву

Вы можете упростить как цикл, так и расширение путем итерации по массиву вместо использования переменной интерполяции. Например:

SAMPLE=('1-first.with.custom.name' '2-second.with.custom.name')
for i in "${SAMPLE[@]}"; do
    echo "$i"
done

Это добавило преимущества по сравнению с другими методами. В частности:

  1. Вам не нужно указывать сложный цикл теста.
  2. Доступ к отдельным элементам массива осуществляется через синтаксис $ SAMPLE [$ i].
  3. Вы можете получить общее количество элементов с расширением переменной $ {# SAMPLE}.

Практическая эквивалентность для исходного примера

Все три метода будут работать для пример, заданный в исходном вопросе, но решение массива обеспечивает максимальную гибкость. Выберите тот, который лучше всего подходит для данных, которые у вас есть.

0
задан KENdi 18 March 2019 в 12:56
поделиться

1 ответ

Свойство задач не должно быть напечатано как AngularFireObject <any[] > ;.

Учитывая, что .valueChanges() всегда будет возвращать наблюдаемое, его следует напечатать как Observable<any> (как пример в документации )

0
ответ дан Daniel 18 March 2019 в 12:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: