Javascript Angular2服务调用模型方法

Javascript Angular2服务调用模型方法,javascript,angular,service,model,Javascript,Angular,Service,Model,我是安格拉尔的新手,所以我会尽量把这个问题弄清楚。我想在我的模型中有一个方法,我可以从我的服务中调用它。现在我用它来替换这个名字 这是我的模型 export class Secret { public name: string; constructor ( public id: number, public type: string, public visible_data: any, public secrets?: any,

我是安格拉尔的新手,所以我会尽量把这个问题弄清楚。我想在我的模型中有一个方法,我可以从我的服务中调用它。现在我用它来替换这个名字

这是我的模型

    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);
  });
}

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

如果您想将服务相互注入,您需要在NGM模块上提供如下服务:

@NgModule({
    selector: 'my-app',
    providers: [NameService]
}):
constructor(private secretService: SecretService) {}
如果您想将服务注入到另一个服务/组件中,只需利用typescript并使用构造函数注入,如下所示:

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

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

如果您想将服务相互注入,您需要在NGM模块上提供如下服务:

@NgModule({
    selector: 'my-app',
    providers: [NameService]
}):
constructor(private secretService: SecretService) {}
如果您想将服务注入到另一个服务/组件中,只需利用typescript并使用构造函数注入,如下所示:

@NgModule({
    selector: 'my-app',
    providers: [NameService]
}):
constructor(private secretService: SecretService) {}
而不是

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类对象。

而不是

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中是可能的吗?我在下面找到了类似的东西(plnkr),但我无法让它在我的应用程序中工作。您好,我很感谢您的回答,但我并没有尝试将一个服务注入另一个服务。对不起,在我完成键入之前,它就被切断了。我希望在我的模型中有一个可以从我的服务调用的函数。这在angular2中是可能的吗?我在下面找到了类似的东西(plnkr),但我无法让它在我的应用程序中工作。我不得不调整我的模型以获得我想要的对象形状,但你的解决方案奏效了!谢谢大家!<代码>tempArray.push(新密码(item.id,item.name,item.type,{“username”:item.data.username},{“password”:item.Secret_到_集[0]。data.password},item.Secret_到_集[0]。组) );任何感兴趣的人的模型
通过{[propName:string]:any;}导出类数据通过{[propName:string]:any;}导出类秘密实现ISecret{constructor(public id:number,public name:string,public type:string,public visible_data:DataThrough,public secrets:SecretThrough,public group_id?:any,public group_name?:any){}
为了让其他发现这个问题的人明白,我没有在我的模型中调用方法,我调整了模型的形状,并使用了您的建议来推送新的秘密()而不是对象。我必须调整我的模型以获得我想要的对象形状,但您的解决方案奏效了!谢谢!
tempArray.push(新密码(item.id,item.name,item.type,{“用户名”:item.data.username},{“密码”:item.Secret_到_集[0]。data.password},item.Secret_到_集[0]。组));
任何感兴趣的人的模型
通过{[propName:string]:any导出类数据;}通过{[propName:string]:any;}导出类Secret实现ISecret{constructor(public id:number,public name:string,public type:string,public visible_data:DataThrough,public secrets:SecretThrough,public group_id?:any,public group_name?:any){}
为了让其他发现这个问题的人明白,我没有在我的模型中调用方法,我调整了模型的形状,并根据您的建议推送新的Secret(),而不是对象