首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >angularjs电话教程第5步

angularjs电话教程第5步
EN

Stack Overflow用户
提问于 2014-10-22 18:18:49
回答 1查看 76关注 0票数 0

我正在读angularjs语音教程。我现在在步骤5上。

在“测试”一节中,我发现了以下代码:

代码语言:javascript
复制
describe('PhoneCat controllers', function() {

describe('PhoneListCtrl', function(){
  var scope, ctrl, $httpBackend;

  // Load our app module definition before each test.
  beforeEach(module('phonecatApp'));

  // The injector ignores leading and trailing underscores here (i.e. _$httpBackend_).
  // This allows us to inject a service but then attach it to a variable
  // with the same name as the service in order to avoid a name conflict.
  beforeEach(inject(function(_$httpBackend_, $rootScope, $controller) {
    $httpBackend = _$httpBackend_;
    $httpBackend.expectGET('phones/phones.json').
        respond([{name: 'Nexus S'}, {name: 'Motorola DROID'}]);

    scope = $rootScope.$new();
    ctrl = $controller('PhoneListCtrl', {$scope: scope});
  }));

我不明白为什么要创建$httpBackend变量。你们能解释一下吗?

提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-22 18:47:06

$httpBackend需要在以后的所有it测试定义中都是可访问的。因此,它必须位于it调用的父级闭包中,您将编写如下所示。

beforeEach是您处理应用于所有it调用的东西的地方,因此初始化$httpBackend是一个明智的地方。

关于上面的注释,如果inject的参数将命名为$httpBackend,那么在这个匿名函数中,您将无法访问“全局”函数(这是闭包在JavaScript中的工作方式),因此您将无法初始化它。因此,编写inject的人员添加了关于引导和尾随下划线的“神奇”功能,以便您可以将其命名与需要在内部初始化的全局变量不同。

为了更好地理解闭包,我建议阅读这篇文章。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26514368

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档