流星角模板函数调用

时间:2016-10-25 09:48:31

标签: angularjs mongodb meteor angular-meteor meteor-helper

我在从流星/角度模板渲染模板函数时遇到问题。我正在尝试使用Moment.js包来格式化我的时间戳。我已经看过使用Blaze完成此操作的示例,但我无法在带有Angular的Meteor中复制它。我的问题是formatTimestamp()函数调用。它没有呈现任何内容,我的控制台中没有错误。我哪里错了?

我的模板

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

插入Mongo功能

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

2 个答案:

答案 0 :(得分: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();
  }
}

但是,请记住在视图中使用$ ctrl作为前缀调用formatTimeStamp,因为它看起来像是在使用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>

答案 1 :(得分: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);
     });
  },