【问题标题】:Meteor angular template function call流星角模板函数调用
【发布时间】:2017-03-07 07:25:01
【问题描述】:

我在从流星/角度模板渲染模板函数调用时遇到问题。我正在尝试使用 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(),

【问题讨论】:

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


    【解决方案1】:

    你的自定义函数在构造函数之外,像这样

    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>
    

    【讨论】:

    • 非常感谢!这解决了它!
    【解决方案2】:

    不需要为日期格式创建函数。使用角度表达式 {{}} 调用函数是不好的做法。您可以在 Meteor 助手中格式化您的日期。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-07
      • 2016-04-08
      • 2015-04-21
      • 2013-05-27
      • 2015-07-16
      • 2014-08-04
      相关资源
      最近更新 更多