angular - subscribe 不是尝试在 Angular 2 中使用 JSON 文件时抛出的函数错误

标签 angular typescript rxjs angular2-services

我正在尝试将 JSON 文件导入到我的服务中,但收到此错误

Error: Uncaught (in promise): TypeError: this._qs.getBasicInfo(...).subscribe is not a function(…)

到目前为止,我的 service 文件如下所示

@Injectable()

export class QuestionService {

BasicInfoData: Observable<any>;

constructor(private http: Http){}

getBasicInfo() {
    this.BasicInfoData = this.http.get('app/questionnaire/questions.json').map(res =>
    res.json()).subscribe(data => this.BasicInfoData = data ) as Observable<any>

    return this.BasicInfoData;
    }

}

我的组件看起来像这样

@Component({

    moduleId    : module.id,
    selector    : 'questionnaire-page',
    templateUrl : './questionnaire.component.html',
    providers   : [ QuestionService ]
})

export class QuestionnairePage implements OnInit, OnChanges {

    BasicInfo: Observable<any>;

    constructor(private _qs: QuestionService, private fbuild: FormBuilder) {}

    ngOnInit() {
        this._qs.getBasicInfo().subscribe( data => this.BasicInfo = data );
     console.log(this.BasicInfo);
    }

}

在尝试从我的服务调用数据之前,我让它工作得很好,直接将其调用到我的组件ngOnInit()中,如下所示

this.http.get('app/questionnaire/questions.json').subscribe(res => {
     this.Questions = res.json()
     console.log(this.Questions);
});

我开始尝试使用同样的东西,当我阅读时,我添加了Observable。我看到另一篇关于 RXJS 的帖子,说他们的问题是在数据到达之前直接订阅数据,他们的解决方法是先使用 .map() ,然后订阅它。它将我的错误从未定义错误更改为我现在遇到的错误,所以我认为这是朝着正确方向迈出的一步。我一直在来回尝试各种事情,它要么会产生另一个错误,表明它在此之前中断,要么我只是从同一代码片段中得到相同的错误。为什么会发生这种情况?

最佳答案

此代码返回订阅

getBasicInfo() {
    this.BasicInfoData = this.http.get('app/questionnaire/questions.json').map(res =>
    res.json()).subscribe(data => this.BasicInfo = data ) as Observable<any>

    return this.BasicInfoData;
    }
}

subscribeObservable 的方法,而不是 Subscription 的方法。 你想要的可能是

getBasicInfo() {
    return this.http.get('app/questionnaire/questions.json')
    .map(res => res.json());
}

这样就会返回一个可以订阅的Observable

关于angular - subscribe 不是尝试在 Angular 2 中使用 JSON 文件时抛出的函数错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46153100/

相关文章:

rxjs - 'of' 与 'from' 运算符

javascript - 组合最新运算符替代方案

node.js - 如何使用 Angular 2 和 Node.js 开发实时文件上传?

javascript - Spectron/WebdriverIO 第 n 个子节点使用 $$[n] 而不是选择器

javascript - 当我删除 map 中的对象时出现问题。我需要调用该函数 3 次

reactjs - 如何在本地插件中将 Gatsbys wrapPageElement 与 Typescript 一起使用?

javascript - 在字段中输入 3 个字符后如何执行 API 调用?

javascript - 这个代码 'true <=> false'是什么意思

javascript - BehaviorSubject 与 combineLatest 的奇怪行为

c# - 从 oidc 客户端获取用户角色