Angular Library在使用时未运行ngOnInit

时间:2018-06-08 02:57:09

标签: angular angular6 angular-cli-v6

我正在按照Angular CLI 6的说明创建库here。我能够创建我的库,并成功构建它。该库包含我用于用户界面的Component,其中包含HTML selector

@Component({
  selector: 'my-lib',
  templateUrl: './my-lib.component.html',
  styleUrls: ['./my-lib.component.css'],
  providers: [MyService],
})

export class MyComponent implements OnInit {
  @Input() id: string;

  constructor(
    private myService: MyService) {
    console.log("constructor");    
  }

  ngOnInit {
    console.log("ngOnInit");
    this.myService.DoStuff();
  }
}

现在我有一个单独的项目,我正在尝试使用这个库。我还没有发布它,所以我通过将dist/<my-lib>的内容复制到node_modules的{​​{1}}来使用它。其他项目。我之前使用的是npm link,但我遇到了here所描述的问题,这个解决方案对我有用。

我可以成功导入库和Module并使用HTML文件中的Component及其选择器,以及传递输入:<my-lib [id]="'my-id'">id正确传递,但ngOnInit中没有运行的逻辑。控制台不会打印"ngOnInit"。但它打印"constructor",并且组件UI元素正确显示。

我是否遗漏了要运行ngOnInit逻辑的内容?

编辑:我应该提到该库正在运行:

  • "@angular/core": "^6.0.3"

  • "@angular/cli": "~6.0.7"

我正在尝试使用该库的项目是:

  • "@angular/core": "^5.0.1"
  • "@angular/cli": "^1.6.5"

不确定这是否会影响任何事情。

EDIT2:修复示例代码。

1 个答案:

答案 0 :(得分:1)

我发现只有问题是您的服务实例也具有相同的名称,将其更改为

constructor(
    private apiService: myService) {
    console.log("constructor");    
  }

ngOnInit {
    console.log("ngOnInit");
    this.apiService.DoStuff();
  }

也希望你已导入,

import { Component, OnInit } from '@angular/core';

还会删除组件中的提供程序并将其移至模块级别。