2016-09-27 56 views
1

對於routes,我與Resolver有點混淆。 Resolvers爲我解決的問題是渲染時組件中存在一個對象。如果我這樣做,沒有旋轉變壓器,並開始通過無極組件的構造函數獲取對象,訪問其嵌套屬性在模板中像在Angular2中對已解析的數據進行異步訪問

{{myObj.foo.bar}} 

可能導致一個錯誤,如果承諾不能解決夠早,這是非常有可能當一個http請求需要完成時。然而,有關從解析器接收解析對象的小信息告訴我,做這樣的組件的構造

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

這難道不相同的sh * T像以前一樣?好吧,我承認,後端請求已經完成,我很快就會收到訂閱。不過,我再次異步訪問已解析的數據。 {{myObj.foo.bar}}在模板渲染時可能有很高的可能性,但是沒有保證,不是嗎?

我不知道我是否看得太重要。這是一種直覺,使用canActivate作爲路由,並將解析對象設置爲一個服務,然後,任何組件都可以同時訪問這個服務,這些服務接近我的意圖。

期待澄清

+0

有沒有保證什麼時候會到來,只要使用安全檢查'MyObj中包含.foo .bar',當這個值最終到達那裏時,它會重新渲染。 –

+0

這就是我想要避免的。使用數十個「?」運營商在我的模板中。而且,運算符意味着對象是可選的。但是,在用戶的個人資料頁面上,他的電話號碼可能是可選的,但用戶對象不是可選的,它是強制性的。 – Matt

回答

2

整個包住模板或您需要*ngIf訪問myObj部分:

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

這將解決?s的多重性(並且會在HTML中添加一個額外的節點)。儘管如此,我沒有看到通過「Subject」訪問數據的目的,這些數據已經被提取並且可以直接訪問。可能我只是有點過頭了,但是「濫用」守衛模式作爲解析器,將數據注入服務對我來說更有意義,至少在我的特定用例中。不管怎麼說,還是要謝謝你。 – Matt

+1

''不會被添加到DOM(與'