Angular JS on Rails – Argumento ‘RaffleCtrl’ no es una función, no está definido

Estoy siguiendo un tutorial para JS angulares enteros en un proyecto RoR.

En mis archivos de controlador js tengo esto:

raffle.coffee

# Place all the behaviors and hooks related to the matching controller here. # All this logic will automatically be available in application.js. # You can use CoffeeScript in this file: http://coffeescript.org/ @RaffleCtrl = ($scope) -> $scope.entries = [ {name:"name1"} {name:"name2"} {name:"name3"} {name:"name4"} ] 

y en mi controlador html (generado por rails) tengo esto:

index.html.erb

 

Raffle

  • {{entry.name}}

por lo que debe repetir el nombre de cuatro en las entradas de la matriz, pero no funciona: abro el registro y encontré este error:

Argumento ‘RaffleCtrl’ no es una función, no está definido

Debe definir la directiva ng-app en application.html.erb :

  ...  

Luego en raffle.js.coffee reemplazar esto:

 @RaffleCtrl = ($scope) -> 

Con este:

 angular.module('Raffler', []).controller "RaffleCtrl", ($scope) -> 

Debe configurar la directiva ng-app requerida en sus aplicaciones angulares: esto especifica el elemento como elemento raíz . Haga esto en el diseño de su aplicación, en un elemento de alto nivel / raíz como un cuerpo o etiqueta html . Nota importante, puede designar esta directiva una vez y solo si agrega erróneamente varios, la primera designación en la aplicación se usará para definir el elemento raíz.

Después de agregar ng-app , especifique un módulo raíz coincidente con el nombre que especificó en ng-app . Dejar la matriz vacía en la definición indica que está definiendo el módulo en lugar de invocarlo. No importa qué nombre uses, solo asegúrate de que sea algo descriptivo de tu aplicación, único entre tus módulos y que especifiques exactamente el mismo nombre para tu módulo raíz que hayas agregado en `ng-app. Este módulo contendrá el código de su aplicación directamente o tendrá dependencias de otros módulos que lo contengan.

Básicamente, debe darle a su aplicación un atributo ng-app , designando el elemento raíz del documento. Y luego debe crear su módulo raíz Angular usando el mismo nombre – “Raffler” en este caso.

Esto debería ser relevante independientemente, pero FWIW estaba usando Rails ‘4.1.5’ y angularjs-rails gem 1.4.4.