Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
正确使用Angular TypeScript构造函数-Can';无法解析的所有参数_Angular_Typescript - Fatal编程技术网

正确使用Angular TypeScript构造函数-Can';无法解析的所有参数

正确使用Angular TypeScript构造函数-Can';无法解析的所有参数,angular,typescript,Angular,Typescript,--aot生成将抱怨警告:无法解析…的所有参数。 事实上,由于useFactory:()部分,我们仍然能够正确运行应用程序。但我不知道这是否正确 当然,我们可以将构造函数更改为 @Injectable({ providedIn: 'root', /* useFactory: () => new MyService(MyAnotherService.myInteger) */ }) export class MyService{ constructor(private some

--aot生成将抱怨
警告:无法解析…的所有参数。

事实上,由于
useFactory:()
部分,我们仍然能够正确运行应用程序。但我不知道这是否正确

当然,我们可以将构造函数更改为

@Injectable({
  providedIn: 'root',
  /* useFactory: () => new MyService(MyAnotherService.myInteger) */
})
export class MyService{

  constructor(private someInteger?: number) {
    // doThings with someInteger
  }
要关闭生成警告, 然而,我不认为
MyService
应该依赖于
MyAnotherService
当它可以仅仅依赖于一个原语时,这也不利于代码的重用性

在这种情况下最好做什么

我的想法是。角度使用Decorator来指示它是一个角度组件(我说的对吗?) 因此,主逻辑体不应该总是耦合到角度DI逻辑,特别是如果它是服务的话。我们可以提取服务代码并将其插入其他位置(使用DI或不使用DI)

只需删除“?”

constructor(private anotherService?: MyAnotherService) {
        // doThings with anotherService
      }
或对于参数:

import {MyAnotherService} from '/pathto your service';
     constructor(private anotherService: MyAnotherService) {
           //prodedures
          }

构造函数通常仅用于依赖项注入

myVariable: any;
constructor(private anotherService: MyAnotherService) {

this.myVariable = [];
}

导出类MyService{
状态:字符串;
构造函数(){
console.log(this.state)/=>未定义
}
恩戈尼尼特(){
console.log(this.state)/=>“正在加入”
}
}
考虑以下几点:

  • 当遇到在dev的
    ng-serve中有效但在中无效的问题时,打开
    “strictMetadataEmit”:true
    ,以了解问题的详细信息
  • 例如,AOT不使用箭头函数
  • @Optional()
    用于

  • 通常的做法是尽可能少地加入逻辑。 大多数情况下,构造函数用于注入依赖项

     <my-component [state]="'joining'"></my-component>
    
        export class MyService{
      state: string;
          constructor() { 
            console.log(this.state) // => undefined
          }
          ngOnInit() {
            console.log(this.state) // => 'joining'
          }
        }
    
    然后在其他函数中使用它

    constructor(private anotherService: AnotherService) {
        // **don't** do Things with anotherService
      }
    

    当从组件创建DOM、注入所有依赖项以及绑定所有输入时,将调用函数ngOnInit()。即使逻辑不依赖于DOM、输入绑定或Dependencie注入,也通常使用ngOnInit()。

    您可以使用可选注入令牌

    token.ts

    ngOnInit() {
       this.anotherService.getValue().subscribe((value) => {
          // do something
       });
    }
    
    import {InjectionToken} from '@angular/core';
    
    export const INTEGER_TOKEN= new InjectionToken<number>('IntegerToken');
    
    import {INTEGER_TOKEN} from './token';
    
    @NgModule({
    //...
      ],
      providers: [
        {
          provide: INTEGER_TOKEN,
          useValue: 1 //Or factory if you need one
        },
    
    服务.ts

    ngOnInit() {
       this.anotherService.getValue().subscribe((value) => {
          // do something
       });
    }
    
    import {InjectionToken} from '@angular/core';
    
    export const INTEGER_TOKEN= new InjectionToken<number>('IntegerToken');
    
    import {INTEGER_TOKEN} from './token';
    
    @NgModule({
    //...
      ],
      providers: [
        {
          provide: INTEGER_TOKEN,
          useValue: 1 //Or factory if you need one
        },
    

    为什么要传递“private someInteger?”:number,这是我希望在构建阶段提供的配置之一,仅此而已。在Typescript中有这种构造函数是不正常的吗?构造函数通常只应用于依赖项注入您是否需要将此服务声明为可树摇动的提供程序?如何创建该服务的实例?你总是让我做吗?那么如何提供整型参数呢?在本例中,您可以看到,我正在尝试构造一个服务,@Input decorator仅用于@Component。我说的对吗?可以发送-->ucan像模型或变量一样使用它吗