我已经开始在youtube上观看有关angularJS的a tutorial video series。在名为测试概述的视频中,John Lindquist创建了一个这样的应用程序:
var myApp = angular.module("myApp", []);
myApp.filter('reverse', function(){
return function(text)
{
return text.split("").reverse().join("");
}
})
function firstCtrl($scope, Data){
$scope.data = Data;
}
然后他用Karma和Jasmine创建了一个单元测试:
describe('filter', function()
{
beforeEach(module('myApp'));
describe('reverse', function()
{
it('should reverse a string', inject(function(reverseFilter) {
expect(reverseFilter('ABCD')).toEqual('DCBA');
}))
})
})
测试通过,代码没问题,但我找不到原因。
我制作了自己的副本,以便了解maggic发生的位置......在听到AngularJS的这个参数命名之后,我将inject(function(reverseFilter)
更改为inject(function(anytext)
并停止了工作正如所料。
然后我注意到如果我像myApp.filter('foe', function()
那样重命名我的过滤器,则必须使用inject(function(foeFilter)
完成注入调用。
这是从哪里来的? AngularJs的注入系统似乎使用一些camelcase将'Filter'连接到过滤器的名称,但我无法在任何地方找到有关此过程的任何文档。我也发现使用inject(function(foe)
不起作用的“有趣”,而将参数名称与相对依赖项匹配似乎是获取AngularJS中依赖项的最简单方法。 AngularJS是否对其他类型的依赖项执行此操作?
任何帮助都将不胜感激。
您可以在angularJs官方教程here中看到以这种方式测试过滤器的示例。
非常感谢。
答案 0 :(得分:1)
是的,过滤器角度连接'过滤器'这个名字。他们也与提供商这样做。使用$provide
或module.provide
创建提供商时,您可以通过附加'提供商'来访问配置块中的提供商。这个名字。我不是100%肯定的原因,但这种方式可以确保您注入配置块的内容确实已配置为提供程序(或常量),如果是过滤器,则使用时他们在你的HTML
<div ng-repeat="stuff in things | filter:model"></div>
angular可以确保查找名为&#39; filterFilter&#39;的过滤器。如果您要在其中放置一个名为filter的服务,它将无法正常工作,因此angular希望允许通过相同的定义名称创建过滤器和服务,同时使用稍微不同的名称保存它们。这有帮助吗?