Observable和http json Angular的问题

时间:2017-06-23 15:16:02

标签: json angular http observable

我有一个问题,因为我从不在* nFor中绘制变量“datos”, 我认为问题在于渲染, 由于这个原因实现了“Observable”,但它仍然无法正常工作

感谢您的帮助!

“首标menu.component.ts”

loader: 'babel-loader', 'ignore-loader', 

“首标menu.html”

import { Component, Input, OnInit, ChangeDetectionStrategy } from '@angular/core';
    import { Http } from '@angular/http';
    import 'rxjs/add/operator/map';
    import 'rxjs/add/operator/catch';
    import { Observable } from 'rxjs/Observable';

    @Component({
        moduleId: module.id,
        selector: 'as-headermenu',
        templateUrl: 'header-menu.html',
        changeDetection: ChangeDetectionStrategy.OnPush
    })

    export class HeaderMenuComponent implements OnInit {
    datos = []; // Aqui se carga el json
    private ruta = 'assets/json_header_menu.json';  

    constructor(private http: Http) {}

    ngOnInit() {
         this.loadJson().subscribe(
                    vdatos => this.datos = vdatos,
                    err => console.log(err),
        () => console.log(this.datos));
        console.log(this.datos);
    }

loadJson(): Observable<any[]> {
          return this.http.get(this.ruta)
            .map(res => res.json());
}
}

“标题菜单-module.ts”

<ul *ngIf="datos"> <li *ngFor="let dato of datos | async; let i =
index"> {{ dato.url }} {{ dato.icono }} {{ dato.titulo }} {{ i }} 
</li> 

图像控制台错误:Console Error

3 个答案:

答案 0 :(得分:1)

这里不需要异步管道,没有它就可以工作,

<ul *ngIf="datos"> <li *ngFor="let dato of datos; let i =
index"> {{ dato.url }} {{ dato.icono }} {{ dato.titulo }} {{ i }} 
</li> 

答案 1 :(得分:1)

| async管道确实有助于从Observable流中解包您的数据。因此,为了使代码工作,您应该将observable分配给datos变量。

ngOnInit() {
    this.datos = this.loadJson();
}

答案 2 :(得分:0)

我修复它删除代码行“changeDetection”

 @Component({
        moduleId: module.id,
        selector: 'as-headermenu',
        templateUrl: 'header-menu.html',
        /*changeDetection: ChangeDetectionStrategy.OnPush*/
    })

谢谢