在阅读了约翰·爸爸的“AngularJS IIFE风格指南”之后,我开始用IIFE包装我所有的文件。当我把我的菜单指令文件打包在生活中时,我遇到了一个问题。测试失败,声称我的menubar指令的控制器是未定义的。
ReferenceError: MenubarController不是在对象处定义的。(/Users/eso/dev/Prismo/frontend/prismo-frontend/app/menubar/directives_test.js:9:2473) at Object.invoke (/Users/eso/dev/Prismo/frontend/prismo-frontend/app/bower_components/angular/angular.js:9:139719) at Object.workFn (/Users/eso/dev/Prismo/frontend/prismo-frontend/app/bower_components/angular-mocks/angular-mocks.js:9:69713) TypeError::无法读取未定义的对象的属性“loadCurrentUser”。(/Users/eso/dev/Prismo/frontend/prismo-frontend/app/menubar/directives_test.js:9:3634)错误:未刷新请求:1 at Function.$httpBackend.verifyNoOutstandingRequest (/Users/eso/dev/Prismo/frontend/prismo-frontend/app/bower_components/angular-mocks/angular-mocks.js:9:45282) at Object。(/Users/eso/dev/Prismo/frontend/prismo-frontend/app/menubar/directives_test.js:9:2853)
我的代码太长,无法在这里发布;我提供了一个指向github回购提交的链接:
测试在生命之前通过,但在加入生命之后失败。然而,其他测试都通过了;所有其他控制器、服务等等,即使在添加了IIFE之后。有什么想法吗?
编辑:请注意,构建应用程序并将其部署会导致一个正常运行的应用程序,没有任何错误。menubar指令按预期呈现和工作。
发布于 2016-01-26 10:04:49
因为指令是封装在iife上的,所以您无法访问MenubarController对象关于考试。使用字符串代替:
ctrl = controller('MenubarController', deps, data);在指令文件中,必须以相同的名称在角模块中注册控制器,并将其按字符串添加到指令中:
.directive('menubar', function() {
return {
templateUrl: 'menubar/menubar.html',
restrict: 'E',
scope: {},
bindToController: {
appname: '=',
tabs: '='
},
controller: 'MenubarController',
controllerAs: 'vm'
};
})
.controller('MenubarController', MenubarController)https://stackoverflow.com/questions/35007875
复制相似问题