2016-09-27 5 views
1

Я немного смущен Resolver s для routes. Проблема, которую Resolvers решает для меня, заключается в том, что объект присутствует в компоненте во время рендеринга. Если бы я сделать это без резольверов и начать выборку объектов в конструктору компоненте через Promise, доступ к его вложенным свойствам в шаблоне какАсинхронный доступ к разрешенным данным в Angular2

{{myObj.foo.bar}} 

может привести к ошибке, если обещание не решает достаточно рано, что весьма вероятно, когда нужно выполнить HTTP-запрос. Тем не менее, мало информация о получении разрешенных объектов из распознаватель говорит мне, чтобы сделать это, как это в конструкторе компонента

this.route.data.subscribe(val => {...}); 

Не это же дерьмо, как и раньше? Хорошо, я признаю, что бэкэнд-запрос уже завершен, и я получу подписку в кратчайшие сроки. Тем не менее я снова обрабатываю разрешенные данные асинхронно. Может быть очень высокий шанс, что {{myObj.foo.bar}} доступен при рендеринге шаблона, но нет гарантии, не так ли?

Я не знаю, вижу ли я это слишком критично. Это ощущение, что использование маршрута canActivate для маршрута и установка разрешенного объекта к службе, которая, в свою очередь, может быть доступна любым компонентом, синхронно приближается к моему намерению.

Ждет уточнения

+0

Там нет никакой гарантии, когда он приедет, просто использовать проверку безопасности 'myObj .foo .bar', Когда значение, наконец, попадет туда, оно будет повторно. –

+0

Вот чего я хочу избежать. Использование десятков "?" операторов в моем шаблоне. Кроме того, оператор означает, что объект является необязательным. Однако на странице профиля пользователя его номер телефона может быть необязательным, но пользовательский объект НЕ является необязательным, он является обязательным. – Matt

ответ

2

Wrap всего шаблон или его части, где вы должны получить доступ к myObj с *ngIf:

<ng-container *ngIf="myObj?.foo"> 
    {{myObj.foo.bar}} 
</ng-container> 
+1

Это позволит решить множественность? S (и добавит дополнительный узел в HTML). Тем не менее я не вижу цели доступа к данным через '' Subject'', которые уже были получены и доступны напрямую. Вероятно, я просто слишком измучен, но «злоупотребление» шаблоном охраны как резольвера, который вводит данные в службу, имеет больше смысла для меня, по крайней мере, в моем конкретном случае использования. Спасибо, в любом случае. – Matt

+1

'' не добавляется в DOM (то же, что и '