2012-08-13 6 views
13

Pracuję nad integracją AngularJs w przykładową aplikację Nodejs. Moje kontroler jest w następujący sposób:Angularjs pęka z wyrażeń funkcji coffeescript

UsersCtrl = ($scope, $http) ->  
    $scope.newUser = {} 
    $scope.users = [ 
    name: "aloman" 
    email: "[email protected]" 
    ] 

który kompiluje do javascript:

// Generated by CoffeeScript 1.3.3 
(function() { 
    var UsersCtrl; 

    UsersCtrl = function($scope, $http) { 
    $scope.newUser = {}; 
    return $scope.users = [ 
     { 
     name: "aloman", 
     email: "[email protected]" 
     } 
    ]; 
    }; 
}).call(this); 

Powyższy kod zrywa z dziennika konsoli:
błędu: Argument 'UsersCtrl' nie jest funkcją, ale niezdefiniowane

Jednak usunięcie anonimowej funkcji owiniętej wokół skompilowanego javascript działa dobrze. Działający kod jest pokazany poniżej.

var UsersCtrl; 
Usersctrl = function($scope, $http) { 
    $scope.newUser = {}; 
    $scope.users = [{ 
     name: "aloman", 
     email: "[email protected]" 
    }]; 
}; 

Dowolny powód, dla którego mój skompilowany kod nie działa. Mam wrażenie, że ma to związek z zastrzykiem zakresu Angular. Używam angularjs 1.0.1

Odpowiedz

38

Byłoby najlepiej używać tej składni, dzięki czemu nie zanieczyszczają zasięg globalny:

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

+2

To jest właściwa droga, aby to zrobić. – btford

+0

Używam 'angular.module ('myModuleName'). Controller ('MyControllerName', ($ scope) ->)' – vansanblch

+0

Chyba będę edytować post z tym, więc ludzie nie są zachęcani do tworzenia zmiennych globalnych (te zepsute testy są złe) –

0

Pomimo, że wszystkie odpowiedzi są obecne prawo jest 3rd opcja:

Podczas kompilacji CoffeeScript do JavaScript upewnij się, że ustawiłeś opcję --bare na kompilator CoffeeScript, co powoduje, że pominął on funkcję w opakowaniu wyjściowym.

+2

To spowoduje, że wszystko znajdzie się w zasięgu globalnym, który jest ogólnie niezadowolony (i konkretnie wywoływany w dokumentach AngularJS, ale dziwnie nie jest śledzony w ich własnych samouczkach lub kontrolerach projektu źródłowego - ale dotyczy dyrektyw, filtrów i usług). – Todd

+0

Zgadzam się, że nie należy tego robić z przyczyn (niepotrzebnie zanieczyszczających zakres globalny) wymienionych powyżej przez Todda –

Powiązane problemy