Rails上的Angular JS - 参数'RaffleCtrl'不是函数,未定义

时间:2015-07-15 07:49:37

标签: javascript html ruby-on-rails angularjs

我在RoR项目上关注整数Angular JS的教程。

在我的控制器js文件中我得到了这个:

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"}
    ] 

在我的控制器html(由rails生成)中我得到了这个:

index.html.erb

<h1>Raffle</h1>

<div ng-controller="RaffleCtrl">
    <form>
        <input type="text" ng-model="newEntry.name">
    </form>

    <ul>
        <li ng-repeat="entry in entries">
            {{entry.name}}
        </li>
    </ul>
</div>

所以它应该重复数组条目中的四个名称,但它不起作用:我打开日志,我发现了这个错误:

  

参数'RaffleCtrl'不是函数,未定义

1 个答案:

答案 0 :(得分:3)

您必须在application.html.erb中定义ng-app指令:

<html ng-app="Raffler">
...
</html>

然后在raffle.js.coffee中替换:

@RaffleCtrl = ($scope) ->

有了这个:

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

您必须在Angular应用程序中设置所需的ng-app指令 - 这将该元素指定为根元素。在您的应用程序布局中,在 body html 标记之类的高级/根元素上执行此操作。重要提示,您可以指定此指令一次 - 如果您错误地添加了多个,则应用程序中的第一个指定将用于定义根元素。

添加 ng-app 后,使用您在ng-app中指定的名称指定匹配的根模块。在定义中保留数组为空表示您正在定义模块而不是调用它。使用什么名称并不重要,只需确保它对您的应用程序具有相对描述性,在您的模块中是唯一的,并且您为“ng-”中添加的根模块指定了相同的名称。应用程序。此模块将直接包含您的应用程序代码,或者将依赖于包含它的其他模块。

基本上,您必须为应用程序提供ng-app属性,指定doc的根元素。然后你必须使用相同的名称创建你的Angular根模块 - &#34; Raffler&#34;在这种情况下。

这应该是相关的,不管FWIW我使用 Rails&#39;&#39; angularjs-rails gem 1.4.4。