【问题标题】:Angularjs - Correct way to send a variable to a pure JavaScript function and return to orderBy filterAngularjs - 将变量发送到纯 JavaScript 函数并返回 orderBy 过滤器的正确方法
【发布时间】:2013-08-06 10:57:31
【问题描述】:

我不确定如何解决这个问题。

我正在从服务器 {createdOnT: "Sun Aug 04 10:27:39 IDT 2013"} 接收 JSON。现在我想将 JSON 的值转换为 javscript Date 对象。所以在我的控制器中,我有一个看起来像这样的函数

$scope.getdate = function(date) {   
  var unformatedDate = date;
  var formated=unformatedDate.replace("IDT","");
  var angformat=new Date(formated);
  $rootScope.date = angformat;
  return $rootScope.date;
} 

在我看来,我这样调用函数

<span ng-class="getdate(val.createdOnT)">
  <b>Date: &nbsp</b>{{date| date:'medium'}}
</span>

最后尝试像这样订购

<li ng-repeat="(key, val) in JSON | orderBy:'-date'">

最后我想将转换后的值发送到 DOM 并使用 Angular 的 orderBy 过滤器以降序排列结果。我的猜测是我的流程有问题,因为我试图在 getdate 函数转换日期之前使用 orderBy 过滤器......

谢谢你, 吉顿

【问题讨论】:

    标签: javascript angularjs angularjs-orderby


    【解决方案1】:

    你的尝试在我看来不太正确。

    您正在将 getdate 的结果传递给 ng-class 指令——这一切将完成的是将带有函数结果的 css 类应用到 span。如果您在 chrome 之类的内容中检查生成的 html,您会发现情况确实如此。

    您或许应该做的是,在您的控制器中,循环通过您返回的数据并将函数应用于正确的字段并将结果存储回其中,或者

    直接在过滤器上应用函数,所以它是 orderby: 'getdate(val.createdOnT)'

    最后一个选项可能是您想要做的。见

    http://docs.angularjs.org/api/ng.filter:orderBy

    【讨论】:

    • 嗨,马修,感谢您的回答。我将尝试使用控制器的选项...我无法直接应用该函数,因为日期值不是 javscript 对象,据我所知 orderBy 只接受 javscript Date 对象。
    • 如果您可以处理添加另一个依赖项,您可以使用 moment.js 库将日期转换为 UNIX 时间戳,该时间戳将按顺序正确排序
    • 谢谢 Matthew,但我想在不添加其他依赖项的情况下解决这个问题......
    【解决方案2】:

    所以,我发现我从服务器接收到的 JSON 是一个对象,而不是一个数组。这就是 orderBy 函数不起作用的原因,也是视图中的数据以无序方式呈现的原因。

    【讨论】:

      猜你喜欢
      • 2015-03-01
      • 1970-01-01
      • 2014-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-22
      • 1970-01-01
      相关资源
      最近更新 更多