"this.appInits[i]" 不是函数
"this.appInits[i]" is not a function
我正在尝试使用 APP_INITIALIZER 从配置文件加载数据。我收到以下错误:
"Unhandled Promise rejection: this.appInits[i] is not a function ;
Zone: ; Task: Promise.then ; Value: TypeError: this.appInits[i]
is not a function"
代码:
import { Injectable } from '@angular/core';
import { Http } from '@angular/http';
import { Observable } from 'rxjs/Rx';
@Injectable()
export class ApiConfig {
private urlList: any = null;
constructor(private http: Http) {
}
public getUrl(key: any) {
return this.urlList[key];
}
public loadConfig(){
let retPromise: Promise<any> = this.http.get('./assets/config/api-config.json')
.map(res => res.json()).toPromise();
retPromise.then(resp => this.urlList=resp.urlList);
//this.urlList = retPromise.urlList;
return retPromise;
}
}
export function apiConfigProvider(config: ApiConfig) {
config.loadConfig();
}
对我做错了什么有帮助吗?
编辑:
Adam 的解决方案修复了原始错误。但现在我看到一个新错误:
TypeError: Cannot set property 'urlList' of undefined
据我所知,没有创建 ApiConfig 的实例。但是我在 Angular 中加载配置文件时看到的所有示例都给出了相同的示例。我想知道如何强制创建 ApiConfig class。我怎样才能让它成为一个单身人士?
下面是ApiConfig的用法。
export BaseService {
constructor (private config:ApiConfig){}
public GetUrl (key: string) {
return config.urlList[key];
}
}
答案:
看起来在上面的代码中创建承诺的方式存在问题。我修改了 link 中给出的 loadconfig() 方法:https://gist.github.com/fernandohu/122e88c3bcd210bbe41c608c36306db9 这解决了我的问题。
我认为这是因为您需要 return 导出函数语句中的函数:
export function apiConfigProvider(config: ApiConfig) {
return () => config.loadConfig();
}
我正在尝试使用 APP_INITIALIZER 从配置文件加载数据。我收到以下错误:
"Unhandled Promise rejection: this.appInits[i] is not a function ; Zone: ; Task: Promise.then ; Value: TypeError: this.appInits[i] is not a function"
代码:
import { Injectable } from '@angular/core';
import { Http } from '@angular/http';
import { Observable } from 'rxjs/Rx';
@Injectable()
export class ApiConfig {
private urlList: any = null;
constructor(private http: Http) {
}
public getUrl(key: any) {
return this.urlList[key];
}
public loadConfig(){
let retPromise: Promise<any> = this.http.get('./assets/config/api-config.json')
.map(res => res.json()).toPromise();
retPromise.then(resp => this.urlList=resp.urlList);
//this.urlList = retPromise.urlList;
return retPromise;
}
}
export function apiConfigProvider(config: ApiConfig) {
config.loadConfig();
}
对我做错了什么有帮助吗?
编辑:
Adam 的解决方案修复了原始错误。但现在我看到一个新错误:
TypeError: Cannot set property 'urlList' of undefined
据我所知,没有创建 ApiConfig 的实例。但是我在 Angular 中加载配置文件时看到的所有示例都给出了相同的示例。我想知道如何强制创建 ApiConfig class。我怎样才能让它成为一个单身人士? 下面是ApiConfig的用法。
export BaseService {
constructor (private config:ApiConfig){}
public GetUrl (key: string) {
return config.urlList[key];
}
}
答案: 看起来在上面的代码中创建承诺的方式存在问题。我修改了 link 中给出的 loadconfig() 方法:https://gist.github.com/fernandohu/122e88c3bcd210bbe41c608c36306db9 这解决了我的问题。
我认为这是因为您需要 return 导出函数语句中的函数:
export function apiConfigProvider(config: ApiConfig) {
return () => config.loadConfig();
}