标签: angular-di

"this.appInits [i]"不是一个函数

我正在尝试使用APP_INITIALIZER从配置文件加载数据.我收到以下错误:

"Unhandled Promise rejection:this.appInits [i]不是函数; Zone :; Task:Promise.then; Value:TypeError:this.appInits [i]不是函数"

码:

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();
}
Run Code Online (Sandbox Code Playgroud)

对我做错的任何帮助?

编辑: …

typescript angular angular-di

18
推荐指数
1
解决办法
7380
查看次数

Angular:useClass vs useExisting?

我们何时应该使用useExisting提供程序而不是useClass

providers: [
{provide: Class1, useClass: Class1}, 
{provide: Class2, useExisting: Class2}]
Run Code Online (Sandbox Code Playgroud)

评论:我没有在SO上找到确切的问题.为了更好的索引决定在这里创建这个特定的索引,虽然我找到了这个答案:

但是想有更多真实的例子

dependency-injection angular angular-di

14
推荐指数
3
解决办法
6923
查看次数

Angular(v5)服务在APP_INITIALIZER promise解析之前构建

我期待Angular loadConfig()在构建其他服务之前等待我的函数结算,但事实并非如此.

app.module.ts

export function initializeConfig(config: AppConfig){
    return () => config.loadConfig();
}

@NgModule({
     declarations: [...]
     providers: [
          AppConfig,
         { provide: APP_INITIALIZER, useFactory: initializeConfig, deps: [AppConfig], multi: true }
     ] })
export class AppModule {
Run Code Online (Sandbox Code Playgroud)

}

app.config.ts

@Injectable()
export class AppConfig {

    config: any;

    constructor(
        private injector: Injector
    ){
    }

    public loadConfig() {
        const http = this.injector.get(HttpClient);

        return new Promise((resolve, reject) => {
            http.get('http://mycoolapp.com/env')
                .map((res) => res )
                .catch((err) => {
                    console.log("ERROR getting config data", err );
                    resolve(true);
                    return Observable.throw(err …
Run Code Online (Sandbox Code Playgroud)

bootstrapping dependency-injection angular-services angular angular-di

14
推荐指数
1
解决办法
3670
查看次数

如何更新依赖注入令牌值

角度依赖注入允许您使用令牌而不是服务类注入字符串,函数或对象.

我在我的模块中声明它是这样的:

providers: [{ provide: MyValueToken, useValue: 'my title value'}]
Run Code Online (Sandbox Code Playgroud)

我这样使用它:

constructor(@Inject(MyValueToken) my_value: string) {
  this.title = my_value;
}
Run Code Online (Sandbox Code Playgroud)

但是,如何更新组件中的值并让其他组件每次都获得新值?换句话说,我想模拟使用类似a BehaviorSubject来发射和接收值的功能.

如果这不可能,那么如果它们仅提供静态数据,那么这些注入令牌值的用途是什么,而我可以简单地在我的组件中声明静态值并直接使用它.

typescript angular-services angular-decorator angular angular-di

10
推荐指数
3
解决办法
3854
查看次数

Angular:如何通过控制台获得组件依赖性?

我将重点放在开发工具中的组件元素上,可以执行以下操作:

 ng.probe($0)
Run Code Online (Sandbox Code Playgroud)

获取特殊对象" DebugElement ".现在我们可以得到它的注射器:

 ng.probe($0).injector
Run Code Online (Sandbox Code Playgroud)

现在我想得到一个在这个组件上定义的依赖.依赖性被定义为类,所以我应该这样做:

ng.probe($0).injector.get(MyService)
Run Code Online (Sandbox Code Playgroud)

但!服务器未在控制台范围中定义.如果我把它变成一个字符串:

 ng.probe($0).injector.get('MyService')
Run Code Online (Sandbox Code Playgroud)

显然它也行不通.

我正在尝试在ReflectiveInjector.get上进行逆向工程,但现在没有运气.有任何想法吗?

dependency-injection angular angular-di

6
推荐指数
0
解决办法
540
查看次数

如何在工厂提供程序中获取QueryParam(Angular4)

我想在我的应用程序中提供一个基于url的QueryParam的常量.

localhost:4200?flag=true
Run Code Online (Sandbox Code Playgroud)

在我的模块提供商中,我添加了

{ provide: FLAG, useFactory: FlagFactory, deps: [...] }
Run Code Online (Sandbox Code Playgroud)

所以我感兴趣的是,如果没有手动解析URL,有一种方法可以做到这一点

function FlagFactory() {
  return location.search.includes('flag');
}
Run Code Online (Sandbox Code Playgroud)

angular angular-router angular-di

5
推荐指数
0
解决办法
339
查看次数

Angular中的StaticInjector与ReflectiveInjector

Angular 5.x将包含本推文中StaticInjector提到的新内容.我有两个问题:

  • 它与现有的ReflectiveInjector有何不同?
  • 它会破坏我现有的代码吗?

dependency-injection angular angular-di

5
推荐指数
1
解决办法
3245
查看次数

是否对任何非延迟加载的模块使用@Injectable提供的In和提供的In:“ root”相同?

我已经仔细阅读了文档,尽管找不到确切的引用位置,但我的印象是,在急切加载的模块providers数组中声明服务将使单例适用于应用程序范围。如果这是真的,

是使用@Injectable providedIn任何非延迟加载模块一样providedIn: "root"

angular angular-di

5
推荐指数
1
解决办法
226
查看次数

为什么Angular CLI不自动在provider数组中添加服务?

当我们创建ComponentPipeangular-cli命令,CLI会自动将它们在特定模块的声明数组,为什么不服务的情况下发生的。

dependency-injection angular-cli angular angular-di

2
推荐指数
1
解决办法
162
查看次数

如何只为几个组件保留一个服务实例?

我使用DI在几个组件中注入服务.现在它不是一个常见的实例.

如何只为几个组件保留一个服务实例?

我试图app.module在部分加载服务providers

dependency-injection angular angular-di

1
推荐指数
1
解决办法
2179
查看次数