Вы не можете перейти к Observable
. Вы должны подписаться на него, чтобы восстановить массив из TodoService
. Попробуйте что-то вроде этого:
public $todos :TodoService[];
// ..
public getGlobalData() {
this.getToDoData().subscribe(result => this.$todos = result);
}
Или вы можете напрямую преобразовать Observable
в массив, используя async
в вашем HTML:
<app-editform [toDo$]="todo" *ngFor="let todo of (cs.$todos | async)"></app-editform>
Этот ответ является действительно frantisek's, я просто копирую здесь для исправления ошибки (я не могу отредактировать непосредственно).
В основном Вы используете то решение с тонкой настройкой:
SELECT
max(DE) as DE, max(EN) as EN
FROM
test
PIVOT (MAX([text]) FOR ISO in (DE,EN)) p
Это получит содержание в одну строку. Кроме того, это отбрасывает идентификатор, так как это не имеет смысла, если Вы хотите одну строку (нет никакой логики для указания, что сделать с ним при объединении в одну строку).
Кроме того, предположение сделано этим, значения в столбце ISO уникальны, иначе, это потеряет данные из-за MAX
агрегат.
Я нашел решение как следующее:
SELECT
ID, DE, EN
FROM
TextTable
PIVOT(MAX([text]) FOR ISO IN (DE,EN)) p
Возможно использовать ЦЕНТР с МАКСОМ, агрегировавшим функцию по тексту.
Так как Вы явно попросили решение нецентра: это должно работать, если Вы знаете, какой ISOs Вы будете иметь в строках. Я назвал таблицу "Test".
declare @temp table ([ID] int, [de] varchar(255), [en] varchar(255)) -- add ISOs if necessary
INSERT @temp
SELECT distinct [ID], '', '' from Test -- ADD '' for other ISOs if necessary
DECLARE c CURSOR read_only
FOR SELECT [ID], [ISO], [Text] from test
DECLARE @ID int, @ISO char(2), @Text varchar(255)
OPEN c
FETCH NEXT FROM c INTO @ID, @ISO, @Text
WHILE (@@fetch_status <> -1)
BEGIN
IF (@@fetch_status <> -2)
BEGIN
UPDATE @temp
SET [DE] = case when @ISO = 'DE' then @Text else [de] end,
[EN] = case when @ISO = 'EN' then @Text else [en] end
-- add ISOs if necessary
WHERE [ID] = @ID
END
FETCH NEXT FROM c INTO @ID, @ISO, @Text
END
CLOSE c
DEALLOCATE c
SELECT * FROM @temp
Запрос без ЦЕНТРА даже при том, что другие ответы доказывают Вас, может использовать ЦЕНТР :)
SELECT
MAX(DE.Text) AS DE,
MAX(EN.Text) AS EN
FROM TextTable AS TT
LEFT JOIN TextTable AS DE
ON DE.ID = TT.ID
AND DE.ISO = 'DE'
LEFT JOIN TextTable AS EN
ON EN.ID = TT.ID
AND EN.ISO = 'EN'