angular ngOnInit()使用HttpClient,异步获取json数据到typescript数据
当我设置angular ngOnInit()使用HttpClient,异步获取json数据到typescript数据,angular,asynchronous,angular-template,Angular,Asynchronous,Angular Template,当我设置HttpClient(this.http)以在ngOnInit()中获取数据时: this.side是一个node.js,返回一个json对象,并查找类似以下的一些条件: { PhotoUrl: 'abc.jpg', Title: 'title', Router:'router', } ERROR TypeError: Cannot read property 'PhotoUrl' of undefined at Object.debugUpdateRenderer [as
HttpClient
(this.http)以在ngOnInit()中获取数据时:
this.side
是一个node.js,返回一个json对象,并查找
类似以下的一些条件:
{
PhotoUrl: 'abc.jpg',
Title: 'title',
Router:'router',
}
ERROR TypeError: Cannot read
property 'PhotoUrl' of undefined
at Object.debugUpdateRenderer [as updateRenderer] (core.js:14689)
at checkAndUpdateView (core.js:13803)
at callViewAction (core.js:14149)
at execComponentViewsAction (core.js:14081)
at checkAndUpdateView (core.js:13804)
at callViewAction (core.js:14149)
at execEmbeddedViewsAction (core.js:14107)
at checkAndUpdateView (core.js:13799)
at callViewAction (core.js:14149)
当我在此.side
模板中设置时:
<div class="side-photo">
<img src="{{side.PhotoUrl}">
</div>
<div class="side-photo">
{{side.Title}}
</div>
PhotoUrl、标题、路由器
这些都有类似的错误。
我不知道这是异步问题还是typescript问题。提示在订阅后尝试console.log()
something,并检查console.log之前或之后是否发生错误
如果它以前发生过,它是一个<强> Aycn路由解析器< /C>来获取数据,或者只是让属性可选<代码>边。.Pulurl
< P>这是因为您试图用一个没有值的变量来呈现模板。(因为REST调用是在呈现模板之后解析的),正如错误所示
尝试在源属性上使用?。
:
<div class="side-photo">
<img [src]="side?.PhotoUrl" />
</div>
<div class="side-photo">
{{side?.Title}}
</div>
{{side?.Title}}
另一种常见模式是使用变量检查包装需要该变量的整个DOM片段,如:
<ng-content *ngIf="side">
<div class="side-photo">
<img [src]="side.PhotoUrl" />
</div>
<div class="side-photo">
{{side.Title}}
</div>
</ng-content>
{{side.Title}}
请参阅,但任何元素都有效:根据您的用例进行选择。您可以在初始化过程中使用默认url初始化side.photourl。这样,您就不会在图像首次呈现时在图像的src中未定义
正如您所建议的那样,这是一个异步问题。?。
根本不“使属性成为可选的”。请参阅我答案中的链接。“可选属性”指的是类型接口或类(位于类型检查器内的编译时)其中as?。
是一个运行时属性访问器,如果未定义,它不会爆炸。哦,好吧。我不知道这一点!!我承认他们感觉有点相似,但他们的行为非常不同。:)总是乐于分享。
<ng-content *ngIf="side">
<div class="side-photo">
<img [src]="side.PhotoUrl" />
</div>
<div class="side-photo">
{{side.Title}}
</div>
</ng-content>