I'm working on integrating AngularJs into an example Nodejs application. My controller is as follows:
UsersCtrl = ($scope, $http) ->
$scope.newUser = {}
$scope.users = [
name: "aloman"
email: "aloman@example.com"
]
which compiles into 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);
The code above breaks with console log:
Error: Argument 'UsersCtrl' is not a function, got undefined
However removing the anonymous function wrapped around the compiled javascript works fine. The working code is shown below.
var UsersCtrl;
Usersctrl = function($scope, $http) {
$scope.newUser = {};
$scope.users = [{
name: "aloman",
email: "aloman@example.com"
}];
};
Any reason why my compiled code isn't working. I have a feeling it has to do with Angular's scope injection. I'm using AngularJS 1.0.1
It would be best to use this syntax so you don't pollute the global scope:
angular.module('myApp').controller('MyController', ($scope) ->)
Despite that all current answers are right there is a 3rd option:
When you compile you CoffeeScript to JavaScript make sure you set the --bare
option to the CoffeeScript compiler, which make him omit the function wrapper in the output.