Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Angularjs使用coffeescript函数表达式中断_Javascript_Coffeescript_Angularjs - Fatal编程技术网

Javascript Angularjs使用coffeescript函数表达式中断

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

我正在将AngularJs集成到一个示例Nodejs应用程序中。我的控制器如下:

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上面提到的原因(不必要地调查全球范围)