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

时间:2014-01-17 06:35:21

标签: ruby-on-rails ruby angularjs

我已经查看了类似问题的大约10个答案,但仍然无法弄清楚这个问题。

我正在尝试将一些Angular添加到我已有的Rails应用程序中,并按照these tips开始。

所以我在我的应用中有这个:

application.coffee

#= require jquery
#= require jquery_ujs
#= require bootstrap
#= require libraries/angular.min
#= require libraries/angular-resource.min
#= require_tree .
#= require main-ng

然后这个

main-ng.coffee

#= require_tree ./controllers

angular.module('Posts', [])

@MainApp = angular.module("MainApp", [
  # modules the app depends on -- this is all I've got so far.
  "Posts"
])

layouts / application.html.haml 中,这与角度有关:

%html{ 'ng-app' => "MainApp" } 

出于某种原因,执行ng_app: 'MainApp'在这里不起作用,尽管这种语法似乎在其他地方有效(并且在其他已建立的Angular我已经编码的应用程序中)。

然后只有控制器的视图:

文章/ show.html.haml

.row.container{ ng_controller: 'PostCtrl' }
# Using hashrocket syntax brings up the same error, while misspelling it does nothing, 
# so this syntax appears to be working here

最后,控制器:

控制器/ PostCtrl.coffee

#= require directives/markdown

postModule = angular.module("Posts", ["markdown"])
console.log postModule # returns angular object on page load

ctrl = postModule.controller "PostCtrl", ($scope, $http, $location) -> 

  $s = $scope

  console.log 'Inside controller' # doesn't get hit

console.log ctrl # returns angular object on page load

任何想法我在这里犯了什么错误的错误?我在这里撞墙了。

可能的线索 - 在视图中更改控制器的名称会更改错误中的名称,但不会更改控制台日志,因此基本上似乎找不到特定控制器时出错。

另外需要注意的是 - 要求我的main-ng.coffee文件中的js控制器目录并在MainApp模块上声明控制器而不是Posts模块,这两者似乎都没有改变。

1 个答案:

答案 0 :(得分:3)

我看到你的Post模块声明了两次

angular.module('Posts', [])

postModule = angular.module("Posts", ["markdown"])

我建议复制第二个并先替换。然后删除第二个模块。

这两种语法都会创建新模块,因此会覆盖之前添加的模块。