2017-02-19 22 views
0

Я долго искал решение, но мне ничего не помогло.Угловая - Mongoose: Не могу манипулировать датами

У меня есть приложение Angular JS, которое работает с Mongoose и Express.

Я хочу сохранить дату как объект из простой формы. Но когда я отправляю свою форму, даты сохраняются как String, а не как объекты. Так что я не могу сделать что-то вроде:

tache.start.getDate(); 

Вот моя форма:

<form name="formTache" ng-submit="addTache(tache)"> 
    <div class="form-group row"> 
     <div class="col-lg-12"> 
      <input name="name" class="form-control" placeholder="Nom" type="text" ng-model="tache.title"/> 
     </div> 
    </div> 
    <div class="form-group row"> 
     <div class="col-lg-12"> 
      <input id="date" name="date" class="form-control" placeholder="Date" ng-model="tache.start" type="date"/> 
     </div> 
    </div> 
    <div class="form-group row"> 
     <div class="text-right col-lg-12"> 
      <button type="submit" class="btn btn-default">Ajouter</button> 
     </div> 
    </div> 

Вот мой Mongoose схема:

var restful = require('node-restful'); 
var mongoose = restful.mongoose; 
var Schema = mongoose.Schema, 
ObjectId = Schema.ObjectId; 
var tachesSchema = new mongoose.Schema({ 
    title : String, 
    start: {type: Date, default: new Date()}, 
}); 
var tachesModel = mongoose.model('taches', tachesSchema); 

module.exports = restful.model('taches', tachesSchema); 

Вот мой контроллер :

angular.module('personaldashboard.tache', []) 
    .controller('TachesCtrl', function($scope, Taches, Progress, toaster) { 
    $scope.tache = new Taches(); 
    var refreshTache = function() { 
     $scope.taches = Taches.query(); 
     $scope.tache = '' 
    } 
    refreshTache(); 

    $scope.addTache = function(tache) { 
     Taches.save(tache,function(tache){ 
     refreshTache(); 
     }); 
    }; 

    $scope.updateTache = function(tache) { 
     tache.$update(function(){ 
     refreshTache(); 
     }); 
    }; 

    $scope.removeTache = function(tache) { 
     tache.$delete(function(){ 
     refreshTache(); 
     }); 
    }; 

    $scope.editTache = function(id) { 
     $scope.tache = Taches.get({ id: id }); 
    }; 

    $scope.deselectTache = function() { 
     $scope.tache = '' 
    } 
    $scope.editTache_Projet = function(tache, projetId) { 
     tache.projet = projetId; 
     tache.$update(function(){ 
     refreshTache(); 
     }); 
    }; 
    }); 

Вот что я получаю:

{ "_id": "58a99df24975ad0104c692b1", "title": "Test", "start": "2017-02-24T23:00:00.000Z" } 

Так почему я получаю строку как "2017-02-24T23:00:00.000Z" для моей даты вместо объекта, тогда как мой Mongoose схеме указать start: {type: Date, default: new Date()}?

Благодарим за помощь.

EDIT

Благодаря Saurabh Агравал, я попытался преобразовать дату завершения заполнения в контроллере:

$scope.addTache = function(tache) { 
    tache.start = new Date(tache.start); 
    tache.end = new Date(tache.end); 
    Taches.save(tache,function(tache){ 
    refreshTache(); 
    }); 
}; 

К сожалению, это ничего не изменило :(

Я до сих пор имеет дату, строка

"2017-02-20T23:00:00.000Z" 

EDIT

Я также попытался добавить директиву

.directive("formatDate", function(){ 
    return { 
    scope: {ngModel:'='}, 
    link: function(scope) { 
     if (scope.ngModel) { 
      scope.ngModel = new Date(scope.ngModel); 
     } 
    } 
    } 
}) 

и назвать его в моей форме

<form name="formTache" ng-submit="addTache(tache)"> 
    <div class="form-group row"> 
     <div class="col-lg-12"> 
      <input name="name" class="form-control" placeholder="Nom" type="text" ng-model="tache.title"/> 
     </div> 
    </div> 
    <div class="form-group row"> 
     <div class="col-lg-12"> 
      <input id="date" name="date" class="form-control" placeholder="Date" ng-model="tache.start" type="date" formatDate/> 
     </div> 
    </div> 
    <div class="form-group row"> 
     <div class="text-right col-lg-12"> 
      <button type="submit" class="btn btn-default">Ajouter</button> 
     </div> 
    </div> 

Но ничего не меняется.

Любые другие идеи?

+0

Теперь измените его, используя 'new Date()' –

+0

Спасибо за ответ. Я пробовал, что мне нравилось показывать мой пост. Но это не работает. Dis, я что-то пропустил? –

ответ

0

В поисках, я обнаружил, что мне не хватает реальной проблемы.

Мои даты - это объекты даты.

Когда я это сделать

$scope.test = new Date([2017,2,15]); 

<pre>{{test}}</pre> 
<pre>{{test.getDate()}}</pre> 

Я получаю

«2017-02-14T23: 00: 00.000Z»и 15

Так показ даты как„2017-02-14T23: 00:. 00.000Z“являются объектами

Но в моем случае, когда я пытаюсь сделать то же самое с датой в ведьма другой объект, как в этой схеме:

var tachesSchema = new mongoose.Schema({ 
    title : String, 
    start: {type: Date, default: new Date()}, 
    end: {type: Date, default: new Date()}, 
    comment : String, 
    state : Boolean, 
    projet : { type: ObjectId, ref: 'Projets' } 
}); 

Я ничего не получаю :(

Этот код:

{{tache.start}}

отображает дату, как т его "2017-02-20T23: 00: 00.000Z"

но

<pre>{{tache.start.getDate()}}</pre> 

показывает ничего.

Что я пропустил?

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

  • Нет связанных вопросов^_^