1

我试图在使用 AngularJS 的 $routeprovider 和 requireJS 时将控制器注入 $routeScope

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

加载控制器功能:

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])

和控制器

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

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

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

1 回答 1

1

loadController('aboutJellyfish')正在返回实际的控制器对象

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

但是resolve {}on$routeProvider需要接收一个函数来代替。

resolve: {
   first: <- it needs to be a function here
}
于 2013-09-24T14:20:11.623 回答