2012-08-13 9 views
13

AngularJs'yi örnek Nodejs uygulamasına entegre etmeye çalışıyorum. javascript içine derlerAngularjs coffeescript işlev ifadesi ile kopuyor

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

:
Hata: Konsol günlüğüne ile araları Yukarıdaki kod

// 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); 

şöyle Benim denetleyicisi olan Argüman 'UsersCtrl' bir işlev değil, tanımsız var

Ancak, derlenmiş javascript'in etrafına sarılmış anonim işlevi kaldırılıyor. Çalışma kodu aşağıda gösterilmiştir.

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

benim derlenmiş kod çalışmıyor bir nedeni. Angular'ın kapsama enjeksiyonu ile ilgili bir his var. Ben angularjs 1.0.1 kullanıyorum

cevap

38

global kapsamını kirletmez kalmaz Bu sözdizimini kullanmak iyi olurdu: Buna rağmen

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

+2

Bunu yapmanın doğru yolu budur. – btford

+0

'angular.module ('myModuleName') kullanıyorum. Controller ('MyControllerName', ($ kapsamı) ->)' – vansanblch

+0

Sanırım, buradaki insanlarla küresel değişkenler yaratmaya teşvik edilmediğinden yazıyı düzenleyeceğim (Bu testler bozuldu) –

0

tüm güncel cevaplar doğru bir 3 var olan option:

CoffeeScript'i JavaScript'e derlediğinizde, CoffeeScript derleyicisine --bare seçeneğini ayarladığınızdan emin olun, bu da çıktıda işlev sarıcısını çıkarmasını sağlar.

+2

Bu, genel olarak her şeyi (genellikle AngularJS dokümanlar olarak adlandırılan, ancak kendi eğitim veya tohum projesinin denetleyicilerinde garip bir şekilde izah edilmeyen, ancak direktifler, filtreler ve hizmetler için olan) küresel kapsam içine sokacaktır. – Todd

+0

Yukarıdakilerin, Todd tarafından yukarıda belirtilen sebepten dolayı (global kapsamı gereksiz yere kirleterek) yapılmaması gerektiğine katılıyorum –