2016-10-25 14 views
0

У меня возникли проблемы с вызовом функции шаблона из метеорного/углового шаблона. Я пытаюсь использовать пакет Moment.js для форматирования штампа времени. Я видел примеры этого с Blaze, однако я не могу воспроизвести его в Meteor с Angular. Моя проблема связана с вызовом функции formatTimestamp(). Это ничего не делает, и ошибок в моей консоли нет. Где я иду не так?Функция вызова углового шаблона Meteor

Мой шаблон

<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> 

Мой контроллер

функция
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(); 
    } 
}) 
} 

Вставка Монго

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

ответ

0

Ваша пользовательская функция выходит за пределы конструктора, как этот

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(); 
    } 
} 

Но также помните, что в режиме вызова для вызова formatTimeStamp с префиксом $ ctrl, поскольку он похож на синтаксис ControllerAs.

Ваш код:

<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> 

Как должно быть:

<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

Большое вам спасибо! Это исправило это! – GraemeB

0

не нужно создать функцию для формата даты. Плохая практика - вызвать функцию с угловыми выражениями {{}}. Вы можете отформатировать дату в помощнике Meteor.

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

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