Javascript Angularjs使用coffeescript函数表达式中断
我正在将AngularJs集成到一个示例Nodejs应用程序中。我的控制器如下:Javascript Angularjs使用coffeescript函数表达式中断,javascript,coffeescript,angularjs,Javascript,Coffeescript,Angularjs,我正在将AngularJs集成到一个示例Nodejs应用程序中。我的控制器如下: UsersCtrl = ($scope, $http) -> $scope.newUser = {} $scope.users = [ name: "aloman" email: "aloman@example.com" ] 可编译为javascript: // Generated by CoffeeScript 1.3.3 (function() { va
UsersCtrl = ($scope, $http) ->
$scope.newUser = {}
$scope.users = [
name: "aloman"
email: "aloman@example.com"
]
可编译为javascript:
// Generated by CoffeeScript 1.3.3
(function() {
var UsersCtrl;
UsersCtrl = function($scope, $http) {
$scope.newUser = {};
return $scope.users = [
{
name: "aloman",
email: "aloman@example.com"
}
];
};
}).call(this);
上面的代码与控制台日志中断:错误:参数“UsersCtrl”不是函数,未定义 但是,删除围绕已编译javascript的匿名函数可以很好地工作。 工作代码如下所示
var UsersCtrl;
Usersctrl = function($scope, $http) {
$scope.newUser = {};
$scope.users = [{
name: "aloman",
email: "aloman@example.com"
}];
};
我编译的代码不工作的任何原因。我觉得这和安格尔的内窥镜注射有关。我使用的是AngularJS 1.0.1最好使用这种语法,这样就不会污染全局范围:
angular.module('myApp').controller($scope)->)
尽管当前所有答案都是正确的,但还有第三个选项:
当您将CoffeeScript编译为JavaScript时,请确保将
--bare
选项设置为CoffeeScript编译器,这会使他在输出中忽略函数包装器。我使用的是angular.module('myModuleName').controller('MyControllerName',($scope)->)
我想我会编辑这篇文章,这样人们就不会被鼓励创建全局变量(那些混乱的测试很糟糕),我相信你需要一个空数组作为模块名称后的第二个参数。angular.module('myApp',[]).controller('MyController',($scope)->)如果提供空数组,它将创建一个名为'myApp'的新模块,且没有依赖项。如果你没有数组,它只会得到现有的“myApp”模块。这样做会把所有东西都放在全局范围内,这通常是不受欢迎的(在AngularJS文档中特别提到,但奇怪的是在他们自己的教程或种子项目的控制器中没有遵循——而是用于指令、过滤器和服务).我同意不应该这样做,因为Todd上面提到的原因(不必要地调查全球范围)