2016-09-06 61 views
0

我有一个控制器驻留在名为EmployeeCtrl.js的单独文件中。在此控制器内部,我有一个名为convertJsonDate的过滤器,可将JsonResult date format转换为标准格式MM/dd/yyyy hh:mm:ss从控制器中的不同JS文件调用过滤器

我现在的问题是,我怎样才能使这个过滤器在未来的不同控制器中可重用?我已经读过,你可以添加你的过滤器在一个单独的js文件filters.js并注入到你的控制器,但我不知道要实现这一点。

TIA

app.js

(function() { 
'use strict'; 

angular.module('app', []); 
})(); 

EmployeeCtrl.js

(function() { 
'use strict'; 

var app = angular.module('app'); 

app.filter('convertJsonDate', ['$filter', function ($filter) { 
    return function (input, format) { 
     return (input) ? $filter('date')(parseInt(input.substr(6)), format) : ''; 
    }; 
}]); 

app.controller('app.EmployeeController', ['$scope', 'app.EmployeeService', function ($scope, EmployeeService) { 

    GetAllEmployee(); 

    $scope.sortColumnBy = function (keyname) { 
     $scope.sortKey = keyname; 
     $scope.reverse = !$scope.reverse; 
    } 

    $scope.employee = { 
     employeeId: '', 
     firstName: '', 
     lastName: '', 
     password: '', 
     daysPerWeek: 0, 
     active: true, 
     departmentId: 0, 
     accountTypeId: 0 
    }; 

    $scope.clear = function() { 
     $scope.employee.employeeId = ''; 
     $scope.employee.firstName = ''; 
     $scope.employee.lastName = ''; 
     $scope.employee.password = ''; 
     $scope.employee.daysPerWeek = 0; 
     $scope.employee.active = false; 
     $scope.employee.departmentId = 0; 
     $scope.employee.accountTypeId = 0; 
    }; 

    function GetAllEmployee() { 
     var getEmployeeData = EmployeeService.getEmployees(); 

     getEmployeeData.then(function (employee) { 
      $scope.employees = employee.data; 
     }, function() { 
      alert('Error in getting employee records'); 
     }); 
    }; 
}]); 

})(); 

使用convertJsonDate滤波器

<div ng-app="app"> 
<div ng-controller="app.EmployeeController"> 
    ..... 
    <tbody> 
     <tr ng-repeat="e in employees | orderBy:sortKey:reverse | filter:searchKeyWord"> 
      <td>{{e.AccountDateExpired | convertJsonDate:'MM/dd/yyyy hh:mm:ss'}}</td> 
     </tr> 
    </tbody> 
    .... 
</div> 
</div> 

引擎收录

Index.chtml http://pastebin.com/aXDSmYAV

EmployeeCtrl.js http://pastebin.com/eQhRREPy

app.js http://pastebin.com/1GB4uhvx

+0

过滤器可用于整个项目。一旦制作完成,您可以在任何模板中使用。你是在谈论在控制器中使用它吗? –

+0

将'convertJsonDate'过滤器放置在不同的JS文件中后,我收到此错误'错误:[$ injector:unpr]未知提供者:convertJsonDateFilterProvider < - convertJsonDateFilter'。 我也读过一篇文章,您可以直接在控制器中使用过滤器,而不是在视图中使用它。 – klaydze

回答

1

不管它们是在同一个文件还是在不同的文件中。只要两者在同一个模块中,或者过滤器位于您的依赖项中包含的模块中,就可以使用它。

我建议有3个文件的位置:一个声明你的模块,一个是你的控制器(S),一个用于您的过滤器(S):

module.js

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

filters.js

var app = angular.module('app'); 

app.filter('convertJsonDate', ['$filter', function ($filter) { 
    return function (input, format) { 
     return (input) ? $filter('date')(parseInt(input.substr(6)), format) : ''; 
    }; 
}]); 

controllers.js

var app = angular.module('app'); 

app.controller('app.EmployeeController', ['$scope', 'app.EmployeeService', function ($scope, EmployeeService) { 

    GetAllEmployee(); 

    $scope.sortColumnBy = function (keyname) { 
     $scope.sortKey = keyname; 
     $scope.reverse = !$scope.reverse; 
    } 

    $scope.employee = { 
     employeeId: '', 
     firstName: '', 
     lastName: '', 
     password: '', 
     daysPerWeek: 0, 
     active: true, 
     departmentId: 0, 
     accountTypeId: 0 
    }; 

    $scope.clear = function() { 
     $scope.employee.employeeId = ''; 
     $scope.employee.firstName = ''; 
     $scope.employee.lastName = ''; 
     $scope.employee.password = ''; 
     $scope.employee.daysPerWeek = 0; 
     $scope.employee.active = false; 
     $scope.employee.departmentId = 0; 
     $scope.employee.accountTypeId = 0; 
    }; 

    function GetAllEmployee() { 
     var getEmployeeData = EmployeeService.getEmployees(); 

     getEmployeeData.then(function (employee) { 
      $scope.employees = employee.data; 
     }, function() { 
      alert('Error in getting employee records'); 
     }); 
    }; 
}]); 

})(); 
+0

嗨@JLRishe,我创建了'filters.js',并把'convertJsonDate'过滤器放入'filters.js'中。运行网站后,我收到了错误'错误:[$ injector:unpr]未知的提供者:convertJsonDateFilterProvider < - convertJsonDateFilter' – klaydze

+0

@klaydze你可以把你当前的尝试放在pastebin或类似的东西上吗? – JLRishe

+0

请参阅我原来的帖子。我已按照要求附加链接 – klaydze

0

他们可以,如果你使用的是相同的应用程序 ......这里被重用,

var app = angular.module('app'); 

你可以用同样的方法此过滤器使用的是它在电流控制器用于任何其他控制器这个程序

+0

你是什么意思?上面的代码是针对一个模块的。你在这里指的是一个'app'? 'ng-app'? –

+0

在同一个应用程序下的控制器是我的意思 –

+0

在角度上,我们把它称为“模块”。应用程序中可以有许多子模块,过滤器一次注册可以在任何地方使用。除了应用程序中的模块外,没有别的东西了。 –