我已经查看了类似问题的大约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模块,这两者似乎都没有改变。
答案 0 :(得分:3)
我看到你的Post模块声明了两次
angular.module('Posts', [])
和
postModule = angular.module("Posts", ["markdown"])
我建议复制第二个并先替换。然后删除第二个模块。
这两种语法都会创建新模块,因此会覆盖之前添加的模块。