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

首先我得到了一个Filter“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;    
    }]);


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

fromMSDate | date:'mediumDate'

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

date | fromMSDate:'mediumDate'

使用|将过滤器添加到表达式中 字符并获得先前的表达式作为第一个参数。 其他参数可以在以下之后指定:

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

链接地址: http://www.djcxy.com/p/77847.html

上一篇: Circular dependency Error when using a custom filter and filterOptions

下一篇: Combating AngularJS executing controller twice