Angular2服务调用模型方法

Angular2 Service call Model Method

本文关键字:方法 模型 调用 服务 Angular2      更新时间:2023-09-26

我是angular2的新手,所以我会尽量让这个问题尽可能清楚。我想在我的模型中有一个可以从我的服务中调用的方法。现在我让它尝试替换名称。

这是我的模型

    export class Secret {
    public name: string;
   constructor (
    public id: number,
    public type: string,
    public visible_data: any,
    public secrets?: any,
    public group_id?: number,
    public group_name?: string
   ) {
    this.name = this.myName();
   }
  public myName(): string {
   return this.name = "whaddup"
 }

}

和我的服务方法

 /*
 * get secrets
*/
public getSecrets(): Promise<Secret[]> {
let tempArray = [];
return this.sdk.list_secrets()
  .then((resp) => {
    resp.map((item) => {
      tempArray.push({
        id: item.id,
        name: this.secret.myName(),
        type: item.type,
        visible_data: {
          "username": item.data
        }
      }); // end push
    });
    return tempArray;
  })
  .catch((err) => {
    console.error(err);
  });
}

list.component.ts code:

export class ListComponent implements OnInit {
 public constantArray: Secret[];
 private secrets: Secret[];
 private secret: Secret;
  constructor(private secretService: SecretService) { }
public ngOnInit() {
  this.getSecrets();
}
public getSecrets() {
 this.secretService.getSecrets()
   .then((data) => {
     this.secrets = data;
     this.constantArray = data;
   });
 }
}

代替

tempArray.push({
    id: item.id,
    name: this.secret.myName(),
    type: item.type,
    visible_data: {
      "username": item.data
    }); // end push

你应该做

tempArray.push(new Secret(item.id, ...));

原因:在你的原始代码中,推入数组的对象是普通的旧javascript对象,它们不是typescript对象。"新……'将创建一个真正的typescript类对象。

要使用angular2服务,你需要做两件事。首先,您需要在服务的顶部添加@Injectable注释。

如果你想要相互注入服务,你需要在你的NgModule中像这样提供它们:

@NgModule({
    selector: 'my-app',
    providers: [NameService]
}):

如果你想把这个服务注入到另一个服务/组件中,你可以利用typescript,像这样使用构造函数注入:

constructor(private secretService: SecretService) {}