AngularJS过滤器无法正常工作

时间:2014-07-14 22:25:39

标签: javascript asp.net-mvc angularjs

我有AngularJS v1.2.19。我尝试在我的项目中使用

我已经为编队日期创建了过滤器。

var app = angular.module('commentApp', []).filter("dateformat", function ($filter) {
    return function (input) {
        if (input) {
            try {
                var date = $filter('CommentDate')(new Date(input), 'dd MMM yyyy');
                return date;
            } catch (e) {
                console.log(e);
            }
        }
    }
});

并致电

<time>{{comment.CommentDate|dateformat }}</time>

我有错误

  

错误:[$ injector:unpr]未知提供者:CommentDateFilterProvider&lt; -   CommentDateFilter   http://errors.angularjs.org/1.2.19/ $注射器/ unpr?P0 = CommentDateFilterProvider%20%3 C-%20CommentDateFilter

3 个答案:

答案 0 :(得分:0)

表示您的过滤器CommentDate不存在

var date = $filter('CommentDate')(new Date(input), 'dd MMM yyyy');

使用角度过滤器格式化日期https://docs.angularjs.org/api/ng/filter/date

<time>{{comment.CommentDate|date:'dd MMM yyyy'}}</time>

答案 1 :(得分:0)

Angular具有依赖注入。它知道要传递给你的函数的东西并不是“神奇的”:它会查看你接受的参数的名称,并试图找到与它们匹配的东西。编写代码的方式,Angular认为你希望它找到一个CommentDateFilter提供者(而且没有一个)。

这是一个只有基本要素的简化版本:

var app = angular.module('commentApp', []).filter("dateformat", function() {
    return function(input) {
        return new Date(input).toLocaleFormat('dd MMM yyyy');
    }
});

我在这里用toLocaleFormat()作弊 - 这在所有浏览器中都不起作用,因为它是新的。我感觉你的问题实际上并不是格式化日期(因为AngularJS已经有一个非常好的日期过滤器:https://docs.angularjs.org/api/ng/filter/date。我想你真正想知道的是如何让实际的过滤器工作,以及上面的例子会给你一个建立你想要的东西的起点。

答案 2 :(得分:0)

请参见此处:http://jsbin.com/taqiq/1/edit

这是您的过滤器的代码

app.filter('mydate' ,function($filter){

  return function(input){
    input =input.replace(/\//g, '');
    var mydate = Date.parse(Date(input));
    return $filter('date')(mydate, 'dd MMM yyyy');


  };

});