2016-05-04 10 views
1


Ich habe eine App mit Mean Framework (Angular, Express, MongoDB) gemacht. Benutzer kann alles posten. Jetzt zeige ich Autor, Titel usw. an, aber ich möchte das Postdatum anzeigen.
Ich habe etwas versucht, und ich habe es geschafft, das aktuelle Datum anzuzeigen, aber wenn ich morgen aktualisieren werde, wird das Datum der Beiträge auf morgen Datum ändern.

Das ist mein Beitrag Schema:
Anzeige Post Datum mit Angular

var PostSchema = new mongoose.Schema({ 
    title : String, 
    link : String, 
    author : String, 
    tagg : String, 
    date: { type: Date, default: Date.now }, 
    upvotes: {type: Number, default :0}, 
    comments: [{ type: mongoose.Schema.Types.ObjectId, ref: 'Comment' }], 
    userliked: {type: mongoose.Schema.Types.ObjectId, ref: 'User' } 
}); 

In meinem MainCtrl:

$scope.addPost = function(){ 

     if(!$scope.title || $scope.title === ''){ 
      return; 
     } 
     posts.create({ 
      title : $scope.title, 
      link : $scope.link, 
      tagg: $scope.tagg, 
      date : $scope.date, 
     }); 

     $scope.title = ''; 
     $scope.link = ''; 
     $scope.tagg = ''; 
     $scope.date = ''; 
    }; 

Und im HTML:

<div class="post-line" ng-repeat="post in posts | orderBy: ' -upvotes' | filter: expression" style=" padding-bottom:10px; margin-bottom:30px; background-color:rgba(0,0,0,0.02); padding:15px; box-shadow:0 2px 4px rgba(0,0,0,0.25);"> 
<div style="font-size:20px; margin-left:10px;display:inline;"> 
    <span ng-show="post.link" id="target" style="display:inline;"> 
     <a href="{{post.link}}" target="_blank"> {{post.title}}</a> 
    </span> 
    <span ng-hide="post.link" class="post-title"> 
     {{post.title}} 
    </span> 
    <span ng-show="post.tagg" style="font-size:14px;color:rgba(0,0,0,0.5);display:block;font-style:italic;"> 
     {{post.tagg}} 
    </span> 
    <span ng-show="post.author" style="font-size:14px;"> 
     posted by 
     <span style="font-weight:bold;">{{post.author}}</span> 
      le 
     <span style="font-size:13px;">{{post.date | date:'dd/MM/yyyy'}}</span> 
    </span> 
</div> 
</div> 


Und natürlich ist es doesn‘ t nichts anzeigen. Vielen Dank für Ihre Hilfe!

EDIT:
Wenn ich einen console.log meines Posts Objekt machen, ich die Post Datum zu sehen, aber alle die Beiträge haben das gleiche Datum und die gleiche Stunde ..

+0

Können Sie den 'ng-repeat'-Code posten (ich nehme an, es gibt eine' ng-Wiederholung ')? Wird irgendetwas angezeigt, wenn Sie den Filter entfernen? – juandemarco

+0

Wir benötigen mehr Code von der Server-Seite. Hast du die Datenbank überprüft (entweder durch die Mongo-Shell oder irgendeinen GUI wie Robomongo), dass die Posts tatsächlich mit dem Datum des Posts darin gespeichert sind? Meine Vermutung ist, dass Sie sie entweder nicht gespeichert haben, sie nicht mit dem eingestellten Datum gespeichert haben oder das Datum beim Lesen von Beiträgen nicht abrufen. Auf jeden Fall denke ich, dass es Server-Seite falsch läuft. – RobbyD

+0

@juandemarco Es ist fertig. Und nein, es zeigt auch nichts ohne den Filter. RobbyD Ich habe eine console.log erstellt, um das Objekt Post anzuzeigen, und du hast Recht, es ist kein Datum gespeichert .. –

Antwort

0

So endlich ist es einfacher, als ich dachte ..
Im Beitrag Schema:

date: { type: Date, default: Date.now } 

Im HTML:

<span >{{post.date | date:'dd/MM/yyyy à HH:mm'}}</span> 

Und es funktioniert. Ich hoffe, es könnte Menschen mit dem gleichen Problem helfen. Danke an alle, die mir helfen.

1

Mongo needs a JavaScript Date object ein Datum zu speichern, . Sie möchten also das aktuelle Datum (und die Uhrzeit) beim Erstellen eines Beitrags speichern, und dazu müssen Sie ein neues Objekt Date ohne Argumente erstellen. Sie können dieses Objekt zu Ihrer create Funktion hinzufügen.

Zum Beispiel:

$scope.addPost = function(){ 

    if(!$scope.title || $scope.title === ''){ 
     return; 
    } 

    // Creates a new Date() object with current day and time 
    // For example: "Wed May 04 2016 15:41:13 GMT+0200 (W. Europe Standard Time)" 
    var postDate = new Date(); 

    posts.create({ 
     title : $scope.title, 
     link : $scope.link, 
     tagg: $scope.tagg, 
     date : postDate, 
    }); 

    $scope.title = ''; 
    $scope.link = ''; 
    $scope.tagg = ''; 
    $scope.date = ''; 
}; 
+0

Sorry, vielleicht war ich nicht klar. Der Benutzer muss kein Datum eingeben. Wenn er den 05/04 um 11h10 postet, muss dieses Datum angezeigt werden. –

+0

Sie meinen, dass der Benutzer kein Datum eingibt, sondern dass das aktuelle Datum + Uhrzeit zusammen mit 'post.create()' gesendet wird? – Lodybo

+0

Ja, effektiv könnte mein Code das denken lassen. Ich war mir nicht sicher, was ich geschrieben habe, es war nach mehreren Tests und einigen Suchen. Datum musste automatisch hinzugefügt werden. –