13

我正在将 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" 
    }];
}; 

我编译的代码不起作用的任何原因。我觉得这与 Angular 的作用域注入有关。我正在使用 AngularJS 1.0.1

4

2 回答 2

38

最好使用此语法,以免污染全局范围:

angular.module('myApp').controller('MyController', ($scope) ->)

于 2012-08-13T12:55:52.517 回答
0

尽管所有当前的答案都是正确的,但还有第三个选项:

当您将 CoffeeScript 编译为 JavaScript 时,请确保将--bare选项设置为 CoffeeScript 编译器,这会使他在输出中省略函数包装器。

于 2013-01-29T05:27:00.800 回答