javascript - AngularJS Controller 解析: Argument 'controller' is not a function,得到对象

标签 javascript angularjs coffeescript requirejs

当使用 AngularJS 的 $routeprovider 和 requireJS 时,我尝试将 Controller 注入(inject) $routeScope

 $routeProvider.when '/',
        templateUrl : loadView('aboutJellyfish')
        controller: 'aboutJellyfish'
        resolve:
          first:loadController('aboutJellyfish')

loadController 函数:

loadController = (ctrl_name) ->
        resolve = undefined
        resolve = ["$q", "$controller", "$rootScope", "$routeParams", ($q, $controller, $rootScope) ->
          deferred = undefined
          deferred = $q.defer()
          require(["../controllers/" + ctrl_name], (ctrl_module) ->
            $controllerProvider.register(ctrl_name, ctrl_module)
            $rootScope.$apply(->
              deferred.resolve not 0
            )
          )
          deferred.promise
        ]

requirejs 配置:

require.config
  paths:
    jQuery: 'lib/jQuery/jquery-1.10.2.min'
    angular: 'lib/angular/angular.min'
    app: 'app'

  shim:
    'angular':
      exports : 'angular'
      deps:['jQuery']
    'app':
      deps:['angular']
      exports:'app'
    'jQuery':
      exports : '$'

  priority: ['jQuery','angular','app']
  urlArgs: 'v=1.01'

require ['angular','app'], (angular) ->
  angular.element(document).ready () ->
    angular.bootstrap(document,[applicationName])

和 Controller

'use strict'
define ['app'],(app) ->
  app.controller 'aboutJellyfish', ['$scope',($scope)=>
    $scope.info='it works!'
  ]

问题是我收到以下错误“参数'aboutJellyfish'不是一个函数,得到了对象”,但在 Controller 中使用以下代码一切正常:

'use strict'
define ['app'],(app) ->
  aboutJellyfish = ["$scope", ($scope) ->
    $scope.info="Jellyfish Beta 0.1"
  ]

最佳答案

您的loadController('aboutJellyfish')正在返回实际的 Controller 对象

return resolve = [ "$q", "$controller", "$rootScope", "$routeParams", function($q, $controller, $rootScope)...

但是 $routeProvider 上的 resolve {} 需要接收一个函数。

resolve: {
   first: <- it needs to be a function here
}

关于javascript - AngularJS Controller 解析: Argument 'controller' is not a function,得到对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18979995/

相关文章:

javascript - 如何在 Vue 应用程序中实现 Angular 风格的配置和运行阶段?

javascript - 在 node.js 中使用数据库请求的结果

coffeescript - Collection.update 给服务器错误

javascript - 如何在 React 中将数据传递给 Chart.js 图表

javascript - AngularJS:如何通过 id 获取 DOM 元素

javascript - 确保程序在设置凭据之前从数据库中检索凭据

javascript - 在 AngularJS 中观看

html - 如何处理下拉angular-ui中的大元素列表?

javascript - 如何对 Mongoose 中的内部数组和匹配元素进行排序

javascript - 在 beforeunload/unload 上发送 Ajax 调用