2015-07-29 2 views
2

У меня есть следующий HTML на моей страницеУгловая UI Datepicker модель связывания не работает

<input type="date" class="form-control" datepicker-popup ng-model="mdl.active_date" 
is-open="opened" min-date="minDate" datepicker-options="dateOptions" 
date-disabled="disabled(date, mode)" close-text="Close" /> 

mdl.active_date установлен в положение «/ Date (1437626784877) /» при просмотре в консоли браузера.

Я получаю ошибку Datepicker директиву: ng-model value must be a Date object, a number of milliseconds since 01.01.1970 or a string representing an RFC2822 or ISO 8601 date.

Что я делаю неправильно здесь?

+1

Если '/' 'в "/ Date (1437626784877) /"' это не опечатка, то это ваша проблема. Это должен быть объект даты, но вы даете ему строку – user2718281

+0

Вот что я думал, но эта дата извлекается из базы данных и отправляет страницу через JSON в приложении .net MVC. Зачем добавлять косые черты? – user1024941

+0

Вы проверили сетевой журнал, чтобы узнать, является ли ответ JSON строкой или номером? Необходимо определить, отправляется ли сервер обратно ''/Date (1437626784877)/"' или если это код клиента, который делает это – user2718281

ответ

1

Сво не проблема angularjs. вы можете использовать new Date(YourVariable).

var datesting='/Date(1437626784877)/'; 
$scope.today =new Date(parseInt(datesting.replace('/Date(', ''))); 

Обновлено на дату ввода строки.

См JSFiddle

+0

Пожалуйста, дайте мне знать, если это не сработает. – Janty

0

JSON не поддерживает даты в качестве собственного распознанного типа данных. Даты сериализуются в строках с использованием одного из нескольких форматов при сериализации (в зависимости от сериализатора) и иногда десериализуются до даты объектов при десериализации (браузеры никогда не делают этого по умолчанию, это не входит в спецификацию JSON).

Формат выглядит так, как .NET сериализует даты для строки в JSON. На стороне приема перед работой с десериализованным JSON вам необходимо преобразовать даты в объект даты. Ни угловой, ни JSON.parse сделайте это за вас.

Вы можете ввести пользовательский синтаксический анализ, используя $httpProvider.defaults.transformResponse.

https://docs.angularjs.org/api/ng/service/ $ HTTP

JSON.parse реализация, которая включает в себя поддержку даты можно посмотреть здесь:

http://weblog.west-wind.com/posts/2014/Jan/06/JavaScript-JSON-Date-Parsing-and-real-Dates

if (window.JSON && !window.JSON.dateParser) { 
    var reISO = /^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*))(?:Z|(\+|-)([\d|:]*))?$/; 
    var reMsAjax = /^\/Date\((d|-|.*)\)[\/|\\]$/; 

    JSON.dateParser = function (key, value) { 
     if (typeof value === 'string') { 
      var a = reISO.exec(value); 
      if (a) 
       return new Date(value); 
      a = reMsAjax.exec(value); 
      if (a) { 
       var b = a[1].split(/[-+,.]/); 
       return new Date(b[0] ? +b[0] : 0 - +b[1]); 
      } 
     } 
     return value; 
    }; 

} 

var date = JSON.parse(json,JSON.dateParser); 
console.log(date); 
Смежные вопросы