Angular2服务调用模型方法

时间:2016-10-24 19:17:12

标签: javascript angular service model

我是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代码:

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;

   });
 }

}

2 个答案:

答案 0 :(得分:0)

要使用angular2服务,您需要做两件事。首先,您需要在服务之上的@Injectable注释。

如果您想将服务注入彼此,您需要在NgModule上提供这些服务,如下所示:

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

如果你想将服务注入另一个服务/组件,你可以只使用typescript并使用这样的构造函数注入:

constructor(private secretService: SecretService) {}

答案 1 :(得分:0)

而不是

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对象。 'new ...'将创建一个真正的打字稿类对象。