开启ng-strict-di模式后$httpBackend undefined报错如何解决?
解决方案
该问题是ng-strict-di模式下依赖注入规则和模块依赖缺失两个原因共同导致的,按以下步骤修复即可:
- 确认主模块已引入
ngMockE2E依赖$httpBackend服务由ngMockE2E模块提供,必须在模块定义时显式声明依赖,否则服务本身不存在:
angular.module('app', [/* 你的其他业务依赖 */, 'ngMockE2E'])
注:请确认
angular-mocks.js脚本已经正确引入到页面中,否则ngMockE2E模块无法正常加载。
- 给run块添加显式依赖注解
strict DI模式下禁止通过参数名隐式推断依赖,必须用以下两种方式之一显式声明依赖:
- 数组注解写法(兼容性最高)
angular.module('app').run(['$httpBackend', 'ServerDataModel', function($httpBackend, ServerDataModel) { $httpBackend.whenGET('/games').respond(function(method, url, data) { var games = ServerDataModel.findAll(); return [200, games, {}]; }); }]);
- $inject属性写法
var runBlock = function($httpBackend, ServerDataModel) { $httpBackend.whenGET('/games').respond(function(method, url, data) { var games = ServerDataModel.findAll(); return [200, games, {}]; }); } runBlock.$inject = ['$httpBackend', 'ServerDataModel']; angular.module('app').run(runBlock);
如果你使用了带ng-annotate能力的构建工具,也可以给函数添加/* @ngInject */注释,由构建工具自动生成注解。
内容的提问来源于stack exchange,提问作者dale thompson
相关产品推荐
相关产品推荐

