У меня есть сервис и компонента, в котором есть переменная partNumber - сообщает номер раздела в котором я нахожусь и дает 1, 2 или 3
export class InfoComponent implements OnInit {
@Output() partEvent = new EventEmitter();
public partNumber: number;
ngOnInit() {
this.partNumber = this.activatedRoute.snapshot.queryParams['part'];
this.partEvent.emit(this.planetNumber);
}
}
Мой сервис работает с XML и мне нужно использовать в нем переменную this.partNumber
@Injectable()
export class DataService {
@Input() planetNumber: string;
// x2js = new X2JS();
headers = new Headers({'Content-Type': 'application/json'});
first = 'assets/first.xml';
second = 'assets/second.xml';
third = 'assets/third.xml';
public x2js = new X2JS();
constructor(private http: Http) {}
get(): Observable<any> {
// TODO: pass a URL as a parameter
return this.http.get(this.first, this.headers).map((res) => res.text());
}
}
Я хочу модифицировать код в нечто подобное
get(): Observable<any> {
if(this.partNumber === 1){
return this.http.get(this.first, this.headers).map((res) => res.text());
} else if(this.partNumber === 2) {
return this.http.get(this.second, this.headers).map((res) => res.text());
} else {
return this.http.get(this.third, this.headers).map((res) => res.text());
}
}
То есть , если я нахожусь в первой части, то сервис будет обрабатывать первый XML, во второй - второй, а третья часть будет для третьего XML.
Подскажите, пожалуйста, как мне передать значение переменной из компонента в сервис?
В общем по задаче: Вам нужно просто partNumber
сделать параметром функции в сервисе. Я бы сделал это так:
public get(part: number): Observable<any> {
let url;
switch(part) {
case 1:
url = this.first;
break;
case 2:
url = this.second;
break;
case 3:
url = this.third;
break;
default:
throw new Error("Bad part number");
}
return this.http.get(url, this.headers).map((res) => res.text());
}
После протолкните ваш сервис в компонент:
constructor(private dataService: DataService ) { }
И в компоненте получайте данные:
let value = this.dataService.get(this.partNumber);
Так же советую избавится от @Input() planetNumber: string
, т.к. имхо сервисы не должны держать в себе состояния.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
В последнее время вижу много сайтов, которые при открытии выдают модальное окно с предполагаемым городом и выбором другого, если определенно...
Заметил такой баг или не баг, что в safari при нажатии "отправить" с пустыми полями не выводит подсказок типа "Заполните это поле", подсказки стандартные,...
Как получить изменяющиеся значение value и передать его в другой элемент: