2015-09-02 4 views
1

Я вытаскиваю этот JSON из mongodb, и у меня есть поле даты, которое имеет тип DATE.Ожидается, что будет date angular.js

Я хочу, чтобы иметь возможность изменить дату, если это необходимо в интерфейсе, для этого мне нужно поле даты ввода типа с атрибутом нг-модель = «event.date», так же, как это:

<input class="tables__sidebar-input" type="date" ng-model='event.date'> 

Это бросает ошибку:

Error: [ngModel:datefmt] Expected `2015-09-03T00:00:00.000Z` to be a date 

Я нашел причину ошибки и установил ее. Я нашел эту директиву, которая должна исправить ошибку:

angular.module('adminApp') 
    .directive("myModelFilter", ["$filter", function($filter) { 
    return { 
     restrict: 'A', // only activate on element attribute 
     require: '?ngModel', 
     link: function(scope, element, attrs, ngModelController) { 
     ngModelController.$parsers.push(function(data) { 
      console.log(data); 
      //convert data from view format to model format 

      // Grab the parameters 
      var params = scope.$eval(attrs.myModelFilter); 

      // Filter with the parameters passed 
      return $filter(params.filter)(data, params.expr, params.comp); 

     }); 

     ngModelController.$formatters.push(function(data) { 
      //convert data from model format to view format 
      // Grab the parameters 
      var params = scope.$eval(attrs.myModelFilter); 

      // Filter with the parameters passed 
      return $filter(params.filter)(data, params.expr, params.comp); 
     }); 
     } 
    }; 
    }]) 

Чтобы использовать, просто добавьте my-model-filter="{filter:'date', expr:'yyyy-MM-dd'}" в поле ввода, которое я сделал:

<input class="tables__sidebar-input" type="date" ng-model='event.date' my-model-filter="{filter:'date', expr:'yyyy-MM-dd'}"> 

Но теперь бросает ту же ошибку с действительным форматом :

Error: [ngModel:datefmt] Expected `2015-09-02` to be a date 

Что здесь отсутствует?

Я потянув данные из модели обслуживания с помощью контроллера:

получить действие:

retrieve: function() { 
    var that = this; 

    this.EventModel.Model.find() 
     .then(function(result) { 
      that.$scope.events = result; 
     }); 
} 

Пожалуйста, ребята, помогите мне! Я уже читал каждый ответ на stackoverflow, каждый пост-блог, и я не могу понять, как его исправить.

Я не хочу использовать маску с текстом типа, я хочу использовать type = "date", который является правильным форматом.

+0

вы смотрели на этот пост ли? http://stackoverflow.com/questions/26486696/angularjs-get-formatted-date-in-ng-model?rq=1 Не похоже, что вам нужна новая директива, просто используйте простое выражение $ filter. –

+0

По структуре, которую я использую, я не могу использовать в контроллере, мне нужен фильтр для решения проблемы. –

+0

Не могли бы вы мне помочь? я могу дать 100 моих очков. –

ответ

0

Это то, что я использую. Я удаляю все существующие $ formatters, $ parsers с .splice, так как мне это не нужно, но вы можете их сохранить.

Как использовать на директивы как type="date" as-date

angular.module('someApp') 
    .directive('asDate', function() { 
    return { 
     require: '^ngModel', 
     restrict: 'A', 
     link: function (scope, element, attrs, ctrl) { 
      ctrl.$formatters.splice(0, ctrl.$formatters.length); 
      ctrl.$parsers.splice(0, ctrl.$parsers.length); 
      ctrl.$formatters.push(function (modelValue) { 
       if (!modelValue) { 
        return; 
       } 
       return new Date(modelValue); 
      }); 
      ctrl.$parsers.push(function (modelValue) { 
       return modelValue; 
      }); 
     } 
    }; 
}); 
+1

Я собираюсь попробовать, дай мне секунду. –

+0

ВЫ, вы знаете, почему этот erro -> Указанное значение 'Wed Sep 02 2015 21:00:00 GMT-0300 (BRT)' не соответствует требуемому формату, 'yyyy-MM-dd'. ? –

+0

1. Это предупреждение браузера или угловая ошибка? 2. может быть попытка 'new Date (modelValue);' to 'new Date (modelValue) .toISOString(). Slice (0,10);' в $ formatters ИЛИ 'return modelValue' для возврата новой Date (modelValue). toISOString(). slice (0,10); 'in $ parsers – YOU

Смежные вопросы