2016-10-25 1 views
0

Ich habe Probleme beim Rendern einer Vorlage Funktionsaufruf von einem Meteor/Winkel Vorlage. Ich versuche, das Moment.js-Paket zu verwenden, um meinen Zeitstempel zu formatieren. Ich habe Beispiele dafür mit Blaze gesehen, aber ich kann es nicht in Meteor mit Angular replizieren. Mein Problem ist mit dem Funktionsaufruf formatTimestamp(). Es wird nichts gerendert und es gibt keine Fehler in meiner Konsole. Wo gehe ich falsch?Meteor Winkelschablone Funktionsaufruf

Meine Vorlage

<li ng-repeat="task in $ctrl.tasks" ng-class="{'private' : task.private}"> 
<details> 
    <summary>{{task.administration.inventoryNumber}}</summary> 
    <ul class="bxslider"> 
    <li><h3>Adminstration</h3> 
     <table> 
      <td>created at: </td><td>{{formatTimestamp(task.administration.createdAt)}}</td> 

Mein Controller

class TodosListCtrl { 
constructor($scope) { 
$scope.viewModel(this); 

this.subscribe('tasks'); 

this.helpers({ 
    tasks() { 
    const selector = {}; 

    return Artefacts.find(selector, { 
     sort: { 
     createdAt: -1 
     } 
    }); 
    }, 
    currentUser() { 
    return Meteor.user(); 
    }, 
    formatTimestamp: function (timestamp) { 
    alert("timestamp"); 
    console.log(timestamp); 
    return moment(timestamp).calendar(); 
    } 
}) 
} 

Insert Mongo Funktion

Artefacts.insert({ 
    administration: { 
    inventoryNumber: invNum, 
    boxNumber: boxNum, 
    createdAt: new Date(), 

Antwort

0

Ihre benutzerdefinierte Funktion außerhalb des Konstrukteurs geht, wie diese

class TodosListCtrl { 
    constructor($scope) { 
    $scope.viewModel(this); 

    this.subscribe('tasks'); 
    this.helpers({ 
     tasks() { 
     const selector = {}; 

     return Artefacts.find(selector, { 
      sort: { 
      createdAt: -1 
      } 
     }); 
     }, 
     currentUser() { 
     return Meteor.user(); 
     } 
    }) 
    } 

    formatTimestamp(timestamp) { 
    alert("timestamp"); 
    console.log(timestamp); 
    return moment(timestamp).calendar(); 
    } 
} 

Aber denken Sie auch daran, formatTimeStamp mit $ ctrl als Präfix aufzurufen, weil es so aussieht, als ob Sie die ControllerAs-Syntax verwenden.

Ihr Code:

<li ng-repeat="task in $ctrl.tasks" ng-class="{'private' : task.private}"> 
    <details> 
    <summary>{{task.administration.inventoryNumber}}</summary> 
    <ul class="bxslider"> 
     <li><h3>Adminstration</h3> 
      <table> 
      <td>created at: </td><td>{{formatTimestamp(task.administration.createdAt)}}</td> 

Wie es sein sollte:

<li ng-repeat="task in $ctrl.tasks" ng-class="{'private' : task.private}"> 
    <details> 
    <summary>{{task.administration.inventoryNumber}}</summary> 
    <ul class="bxslider"> 
     <li><h3>Adminstration</h3> 
      <table> 
      <td>created at: </td><td>{{$ctrl.formatTimestamp(task.administration.createdAt)}}</td> 
+0

Vielen Dank! Das hat es repariert! – GraemeB

0

brauchen keine Funktion für das Datumsformat zu erstellen. Es ist schlecht, eine Funktion mit Winkelausdrücken {{}} aufzurufen. Sie können Ihr Datum in Meteor Helper formatieren.

this.helpers({ 
    tasks() { 
    const selector = {}; 

    this.value = Artefacts.find(selector, { 
     sort: { 
     createdAt: -1 
     } 
    // add filter here on createdAt 
     $filter('filter')(this.value.cretedAt); 
    }); 
    },