循环依赖关系使用自定义筛选器和filterOptions时出错

时间:2013-11-07 13:39:32

标签: angularjs ng-grid

首先我得到了一个过滤器“fromMSDate”,我用它来转换json日期而不是正常日期,如果这个过滤器放置然后刷新我的输入绑定到filterOptions.filterText我得到'循环依赖'和'未知提供者:fromMSDate | dateFilterProvider< - fromMSDate'

//模块


var mainApp = angular.module('mainApp', ['ngGrid']);

//控制器


    mainApp.controller('MandateListController', function MandateListController($scope) {
        $scope.filterOptions = { filterText: '' };
        $scope.mandates = data;
        $scope.gridOptions = {
            data: "mandates",
            filterOptions: $scope.filterOptions,
            sortInfo: { fields: ['ExpectedDate', 'ProjectName'], directions: ['desc', 'asc'], columns: ['ExpectedDate', 'ProjectName'] },
            columnDefs: [
                { field: 'ProjectName', displayName: 'Project Name', width: '30%', cellClass: 'text-center' },
                { field: 'Amount', displayName: 'Size', cellFilter: 'number:2', cellClass: 'text-right' },
                { field: 'RatingId', displayName: 'Rating', cellClass: 'text-center' },
                { field: 'CurrencyId', displayName: 'Currency', cellClass: 'text-center' },
                { field: 'MaturityId', displayName: 'Maturity', cellClass: 'text-center' },
                { field: 'EstimatedPl', displayName: 'Estimated P/L', cellFilter: 'number:2', cellClass: 'text-right' },
                { field: 'ExpectedDate', displayName: 'Expected Date', cellClass: 'text-center', cellFilter: "fromMSDate | date:'mediumDate'" }
                    ]
           };
    });

//过滤


    mainApp.filter("fromMSDate", [function () {
         var result = function(date, formatstring) {
              if (formatstring === null || formatstring === undefined) {
                  formatstring = "DD MMM YYYY";
              }

              return moment(date).format(formatstring);
         };

        return result;    
    }]);

1 个答案:

答案 0 :(得分:0)

如果我正确理解你,我会以某种方式在HTML页面中包含$scope.gridOptions.columnDefs[].cellFilter的内容。在上一个columnDef中,您有以下过滤器:

fromMSDate | date:'mediumDate'

我认为你期望date将作为第一个参数传递,'mediumDate'作为第二个参数传递,但angular.js中的过滤器有另一种语法,你需要这样写:

date | fromMSDate:'mediumDate'

将过滤器添加到具有|字符的表达式中,并将前一个表达式作为第一个参数。可以在:之后指定其他参数。

因此,在您的示例中,angular.js将'date'识别为过滤器名称,并且无法为其找到DateFilter或DateFilterProvider。