Я использую Ionic 2 с Angular 2 в своем проекте. В корневом компоненте вы можете нажать кнопку «Добавить», чтобы добавить новый отчет через сложную форму и множество предварительно предоставленных данных (есть некоторые варианты, которые загружаются с данными, полученными из базы данных sqlite) Теперь в моем «CreateReportComponent» i имеет следующий конструктор для загрузки данных и назначить его в локальный переменный массиве:Как загрузить несколько данных через сервис и дождаться его в Angular2
selectEmployeeOptions: Employee[];
constructor(private dbService: DatabaseService) {
dbService.getAllEmployees().then(employees => {
this.selectEmployeeOptions = employees;
});
// load more data like tasks etc.
});
Но когда я хочу изменить эти данные в моем компоненте, массив пуст. Я попытался сделать это в ngOnInit(), но это похоже на раннее.
Я хочу, чтобы что-то вроде этого, прежде, чем получает отображается компонент:
dbService.getAllEmployees().then(employees => {
this.selectEmployeeOptions = employees;
// modify data
this.selectEmployeeTitleOptions = employees.map((item) => {
return item.title;
});
console.log(JSON.stringify(this.selectEmployeeTitleOptions)) // --> empty
});
Но selectEmployeeTitleOptions пусто ...
функция в databaseService выглядит следующим образом:
getAllEmployees(): Promise<Emplyoee[]> {
let query = "SELECT * FROM employees";
let employeeList = [];
this.database.executeSql(query, []).then((data) => {
if(data.rows.length > 0) {
let e = new Employee();
e.id = data.rows.item(i).id;
e.firstname = data.rows.item(i).firstname;
e.lastname = data.rows.item(i).lastname;
employeeList.push(e);
}
}, (error) => {
// handle error
});
return Promise.resolve(employeeList);
}
Я прочитал, что есть шаблон Resolve (https://blog.thoughtram.io/angular/2016/10/10/resolving-route-data-in-angular-2.html) Но мне нужно сделать много e, а не только для контактов, как в примере.
Итак, вопрос: как ждать множественных звонков в базу данных?
Спасибо. Я пробовал это, но получаю сообщение об ошибке: TypeError: data.rows.Карта не является функцией –
Вы могли бы предоставить значение data.rows (log to console)? –
Несомненно. ** data.rows ** является {"length": 3}, тогда как ** data ** является {"rows": {"length": 3}, "rowsAffected": 0} –