HTTP调用后,Angular 2视图未更新

时间:2017-04-03 12:04:45

标签: javascript angular zone.js

我尝试使用Angular 2,并尝试使用内置HTTP服务执行http请求:

@Injectable()
export class MyService {
    constructor(private http: Http) {
    }

    public get(): Observable<string[]> {
        return this.http.get('http://localhost:8080/endpoint')
               .map((data) => <string[]>data.json()['content']);
    }
}

用法如下:

export class MyComponent implements OnInit {
    public content: string[];

    constructor(private myService: MyService) {
    }

    public ngOnInit(): void {
        this.myService.get().subscribe((data) => {
            this.content = data;
        });
    }
}

如果我使用zone来运行数据分配,那么它会按预期工作,但我觉得它有点hacky而且我不太明白为什么它不起作用。< / p>

我读到代码可能在角度区域之外运行,但我不明白为什么我只使用内置功能。<​​/ p>

查看绑定:

<div *ngFor="let str of content">
    {{ str }}
</div>

你能帮忙吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

原来这个问题既不是webpack也不是我的代码,而是我使用的第三方代码。

我实现了基于this answer的Google登录,因为您可以看到它使用本机JS处理程序 - 我认为这会导致问题。如果我将该代码放入zone.run,那么一切正常。我认为原因是处理程序在区域上下文之外运行,这就是视图未更新的原因。