2016-10-24 2 views
1

Я новичок в angular2, поэтому постараюсь сделать этот вопрос максимально ясным. Я хочу иметь метод в моей модели, который я могу позвонить из службы. Сейчас у меня есть попытка заменить имя.Angular2 Service call Метод модели

Вот моя модель

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; 

    }); 
} 

} 

ответ

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 Object, и они не являются объектами машинописи. «Новый ...» создаст реальный объект класса typecript.

+0

Мне пришлось настроить мою модель, чтобы получить форму, которую я хотел для своего объекта, но ваше решение сработало! Спасибо! 'tempArray.push ( новый Secret ( item.id, item.name, item.type, { "имя пользователя": item.data.username }, { "пароль": пункт. secret_through_set [0] .data.password }, item.secret_through_set [0].группа) ); ' – caraclarke

+0

Модель для всех, кто заинтересован ' export class DataThrough { [propName: string]: any; } export class SecretThrough { [propName: string]: any; } экспорта класс Тайных орудий ISecret { конструктор ( общественного идентификатор: число, публичного имени: струнный, общественного типа: струнный, общественного visible_data: DataThrough, государственных секреты: SecretThrough, общественного group_id ?: любого , public group_name ?: any ) {}) {} ' – caraclarke

+0

Чтобы быть понятным для всех, кто находит этот вопрос, я не позвонил методу в своей модели, я скорректировал форму моей модели и использовал ваше предложение для нажатия новый Secret() вместо объекта – caraclarke

0

Для работы с angular2 службы, вы урожденная d сделать две вещи. Прежде всего, вы должны в аннотации @Injectable поверх ваших услуг.

Если вы хотите, чтобы ввести услуги в друг друга, вы должны предоставить им на ваших NgModule так:

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

Если вы хотите, чтобы ввести услугу в другой сервис/компонента вы можете просто кредитное плечо машинопись и инъекционное конструктор так:

constructor(private secretService: SecretService) {} 
+0

Hi KwintenP, я ценю ответ, но я не пытаюсь внедрить услугу в другую службу. – caraclarke

+0

Извините, он отключился, прежде чем я закончил печатать. Я хочу иметь функцию в моей модели, которую я могу позвонить из службы. Это то, что возможно в угловом2? Я нашел что-то похожее ниже (plnkr), но я не могу заставить его работать в моем приложении. https://plnkr.co/edit/7lKHvArpayrMAzm5Xgk1?p=preview – caraclarke