#json #angular #highcharts #datepicker
#json #angular #высокие диаграммы #datepicker
Вопрос:
У меня есть приложение Angular 2, в котором я использую angular2-highcharts. Я получаю данные из json для highcharts, но я хотел бы отфильтровать, какие данные будут использоваться в диаграммах по дате начала и окончания. Может кто-нибудь помочь мне с этим вопросом или дать мне ссылку на учебник или что-то еще, где я могу найти информацию об этом.
Я использую mydaterangepicker, и есть сервис для получения данных из json:
@Injectable()
export class ValuesService {
http: Http;
constructor(http: Http) {
this.http = http;
}
getValues(beginDate: Date, endDate: Date):
Observable<Values> {
return this.http.get('http://localhost:54122/api/ProductionValues/GetProductionValuesDATETIME?startDate=' beginDate 'amp;endDate=' endDate)
.map(this.extractData)
.catch(this.handleError)
}
private extractData(res: Response) {
let body = res.json();
return body || {};
}
private handleError(error: any) {
// // In a real world app, we might use a remote logging infrastructure
// // We'd also dig deeper into the error to get a better message
let errMsg = (error.message) ? error.message :
error.status ? `${error.status} - ${error.statusText}` : 'Server error';
console.error(errMsg); // log to console instead
return Observable.throw(errMsg);
}
Комментарии:
1. Это вопрос об angular2, потому что вы передаете параметры диапазона в API сервера, может быть, вам следует обрабатывать фильтрацию там?
2. Я хочу выбрать диапазон дат в приложении с помощью datepicker
3. Ваш сервер должен обработать это, принять эти параметры и вернуть только эти значения или вернуть все ваши данные и отфильтровать их на стороне клиента (что не является хорошим вариантом). Согласно вашему API, ваш сервер должен возвращать отфильтрованные данные.
4. Я выбираю дату начала и дату окончания в mydaterangepicker, поэтому у меня есть два значения 2016-10-06, 2016-10-13, и как я могу присвоить это значение службе, где я хочу иметь этот URL: <code> localhost:54122/api/ProductionValues/ … >
5. Вы должны получить значения диапазона из datepicker через их API, затем проанализировать его по типу даты и передать в конечную точку вашей службы
Ответ №1:
Проблема заключается res.json()
в том, что возвращает даты в виде строк. В итоге я изменил свое отображение для вызовов http get в своем приложении, чтобы оно выглядело примерно так:
.map(res => {
let jsonData = res.json();
for (let obj of jsonData) {
for (let prop in obj) {
if (moment(obj[prop], moment.ISO_8601).isValid()) {
obj[prop] = new Date(obj[prop]);
}
}
}
return jsonData;
})
По сути, это использует momentjs для преобразования любых строк допустимого формата в фактический объект date вместо строки. Возможно, вам потребуется изменить параметр формата в зависимости от того, как данные возвращаются с сервера.
Кроме того, обратите внимание, что вам нужно будет выполнить a npm install moment
в вашем проекте и import * as moment from 'moment';
в вашем компоненте, чтобы это сработало.