Angular4:在视图中显示对象的子属性

Posted

技术标签:

【中文标题】Angular4:在视图中显示对象的子属性【英文标题】:Angular4: Display subProperty of an object in a View 【发布时间】:2018-06-18 21:47:28 【问题描述】:

我是 angular4 的新手,我在显示一些信息时遇到了一些问题。

我有一个角度服务,它向我的网络服务发出 HTTP 请求:

@Injectable()
export class AstroService 

    constructor(private _http: Http) 
    get() 
        return this._http.get('api/astro/get')
            .map((res: Response) => 
                return  res.json();
            );
     

在我的组件中,我查询服务:

export class DisplayComponent 
    horoscopes: any = null;

    constructor(private astroService:AstroService) 
        this.astroService.get()
            .subscribe(data => 
                console.log(data);
                this.horoscopes = data;
            );
    

console.log 显示预期数据:

但在我的组件看来,当我尝试显示它时:

<div style="border: 1px solid red">display Component</div>

<ul>
    <li *ngFor="let horosocope of horoscopes">
        horoscope.sign.name
    </li>
</ul>

我得到了我的 12 个要点,但没有别的,Chrome 控制台告诉我它与“签名”无关:

VM4824 DisplayComponent.ngfactory.js:8 ERROR TypeError: Cannot read property 'sign' of undefined
    at Object.eval [as updateRenderer] (VM4824 DisplayComponent.ngfactory.js:11)
    at Object.debugUpdateRenderer [as updateRenderer] (core.js:14727)
    at checkAndUpdateView (core.js:13841)
    at callViewAction (core.js:14187)
    at execEmbeddedViewsAction (core.js:14145)
    at checkAndUpdateView (core.js:13837)
    at callViewAction (core.js:14187)
    at execComponentViewsAction (core.js:14119)
    at checkAndUpdateView (core.js:13842)
    at callViewAction (core.js:14187)

我做错了什么?抱歉,我觉得这是一个愚蠢的问题,但我无法弄清楚我错过了什么。

【问题讨论】:

&lt;li *ngFor="let horosocope of horoscopes"&gt;horoscope | json&lt;/li&gt;看到什么? 几乎一样的东西,12个空&lt;li&gt; 【参考方案1】:

只是打字错误!

<li *ngFor="let horosocope of horoscopes">
    horoscope.sign.name
</li>

应该是

<li *ngFor="let horosocope of horoscopes">
    horosocope.sign.name
</li>

是时候休息一下了:-)。

【讨论】:

“G-g-g-g-g-g-g-god-like!”,你摇滚!我在几个小时内搜索了这个!没想到在这种情况下我会遇到这个错误(但更像是“星座不存在”【参考方案2】:

尝试添加问号

  <div style="border: 1px solid red">display Component</div>

 <ul>
     <li *ngFor="let horoscope of horoscopes">
       horoscope?.sign?.name
   </li>
</ul>

当 Angular 在 horoscope 获得赋值之前渲染视图时,它会导致异常。 ?.当 horoscope 为 null 或 undefined 时停止评估,这通常发生在异步获取数据时,例如从服务器获取可能需要相当长的时间。

【讨论】:

现在我没有异常,但是没有任何东西添加到我的html中,它看起来只是&lt;ul&gt;&lt;li&gt;&lt;/li&gt;&lt;li&gt;&lt;/li&gt;&lt;li&gt;&lt;/li&gt;...&lt;/ul&gt;(带有额外的_ng-content-c8) 看起来 sign 是一个你有“名字”的对象的属性,所以你应该正确访问它 没错,但如何“正确”访问它? horoscope?.sign && horoscope?.sign?.name 你可以试试这个

以上是关于Angular4:在视图中显示对象的子属性的主要内容,如果未能解决你的问题,请参考以下文章

在视图Angular4中显示对象

我需要导航到另一个视图,其中包含带有 MVVM 的 WPF 中父对象的子对象

将核心数据对象传递给 didSelectRowAtIndexPath 上的子视图

angular4-X知识点汇总

从父级删除后保留的子视图控制器

如何切换数组中对象的属性并更新 SwiftUI 视图?