Угловой RC 1 - Узнайте, когда подписка успешно завершена

70
4

Я сталкиваюсь с некоторыми проблемами с момента перехода на RC1, один из которых входит в один из моих компонентов, у меня есть служба, которая захватывает некоторый json из larvel api и подписывается на него, тогда в компоненте у меня есть следующее

        import {Component, ElementRef, OnInit} from '@angular/core';
import {ProjectsMainApi} from "../../../services/projects-main";

declare var jQuery: any;
declare var subscribe: any;

import { RouteConfig, ROUTER_DIRECTIVES, ROUTER_PROVIDERS } from '@angular/router-deprecated';

@Component({
selector: 'projects',
templateUrl: './app/components/Projects/list/index.html',
directives: [ROUTER_DIRECTIVES]
})

export class ProjectsListComponent implements OnInit {

elementRef: ElementRef;

project: Object;

constructor(elementRef: ElementRef, private _projectsmainapi: ProjectsMainApi) {
this.elementRef = elementRef;
this.project = this._projectsmainapi.project$;

this._projectsmainapi.getProjectsMain();
}
ngOnInit() {

this.project.subscribe(() => {

alert('subscribed');

});
}
}

часть, которая терпит неудачу

                this.project.subscribe(() => {

alert('subscribed');

});

перед обновлением компилятор скомпилировал это без проблем, и он сработал, но с момента обновления я получаю эту ошибку ошибки TS2339: Property 'subscribe' не существует в типе 'Object'.

Мой файл службы не изменился вообще и изложен следующим образом

    import {Http, Headers, Response} from "@angular/http"
import {Injectable} from "@angular/core"
import {IProjectsMain} from "../interfaces/IProjectsMain"
import 'rxjs/Rx';
import {Observable} from 'rxjs/Observable';
import {Observer} from 'rxjs/Observer';
import 'rxjs/add/operator/share';
import 'rxjs/add/operator/map';

@Injectable()
export class ProjectsMainApi {

apiUrl: string = "http://www.test.io/api/projects";

headers: Headers = new Headers;

project$: Observable<IProjectsMain[]>;

private _ProjectsMainObserver: Observer<IProjectsMain[]>;

private _dataStore: {

project: IProjectsMain[]

};

constructor(private _http: Http) {

this.headers.append('Content-Type', 'application/x-www-form-urlencoded');

this.headers.append('X-Requested-With', 'XMLHttpRequest');

//this.project$ = new Observable(observer => this._ProjectsMainObserver = observer).share();
this.project$ = new Observable<IProjectsMain[]>(observer => this._ProjectsMainObserver = observer).share();
this._dataStore = { project: [] };
}

public getProjectsMain() {

this._http.get(this.apiUrl).map(response => response.json()).subscribe(data => {

this._dataStore.project = data.project;

this._ProjectsMainObserver.next(this._dataStore.project);

}, error => console.log('Could not load projects.'),
() => "doneskies");

}

}

Проведя день Googling и возиться с кодом Im в убытке относительно того, как я могу исправить это и сделать его компиляцией, так что теперь я надеюсь, что кто-то может знать, как справиться с этим по-другому, то есть мне нужно сказать, когда подписка происходит, и она преуспевает, но изнутри моего компонента конечный результат должен запускать предупреждение, которое содержится в моем файле компонента

спросил(а) 2016-05-06T01:06:00+03:00 4 года, 5 месяцев назад
1
Решение
58

Изменение типа переменного project в Observable<any> или Observable<IProjectsMain[]> как в вашей службе.

export class ProjectsListComponent implements OnInit {
elementRef: ElementRef;
project: Observable<any>;
...
}

Он работал раньше, потому что вы, вероятно, изменили свой tsconfig.json чтобы иметь?:

"noEmitOnError": true 

ответил(а) 2016-05-06T01:23:00+03:00 4 года, 5 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема