gpt4 book ai didi

javascript - Angular Controller 全局与闭包

转载 作者:行者123 更新时间:2023-12-02 17:22:39 26 4
gpt4 key购买 nike

这个问题让我抓狂。

测试代码:

describe('controller', function(){
module('controllers');
var createCtrl;
beforeEach(inject(function($injector){

$rootScope = $injector.get('$rootScope');
var $controller = $injector.get('$controller');
createCtrl = function(){
return $controller('controller', {
$scope: $rootScope
});
}));
it('should create a controller', function(){
var ctrl = createCtrl();
});
});

如果 Controller 函数是在全局范围内定义的,例如,它会起作用

angular.module('controllers', [])
.controller('controller', ['$scope', controller]);
function controller($scope){}

但是如果我将函数本身移动到数组中,或者将模块代码包装在闭包中(以这些的任意组合):

(function(angular){
angular.module('controllers', [])
.controller('controller', ['$scope', function($scope){}]);
})(angular);

测试开始抛出此错误错误:[ng:areq]参数“controller”不是函数,未定义

有什么想法吗?我真的需要这个 Controller 不污染全局范围。

最佳答案

首先您需要修复语法问题。分配给 createCtrl 的函数缺少右大括号。

要解决您的实际问题,您需要包含 Angular 模拟并替换

module('controllers');

beforeEach(angular.mock.module('controllers'));

将函数本身移动到数组中似乎完全有效,我个人一直使用这种语法。不过,将它们包装在闭包中似乎没有必要,因为您没有公开任何变量。

我还建议不要使用 $rootScope 作为当前 $scope。而是使用 $rootScope.$new()

关于javascript - Angular Controller 全局与闭包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23792386/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com