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

現在のすべての回答が正しいにもかかわらず、3番目のオプションがあります。

CoffeeScript を JavaScript にコンパイルするときは、必ず--bareCoffeeScript コンパイラにオプションを設定してください。これにより、出力で関数ラッパーが省略されます。

于 2013-01-29T05:27:00.800 に答える