【发布时间】:2015-04-25 19:52:38
【问题描述】:
我需要在加载控制器之前解析控制器中的数据。所以我决定在路由器中这样做。但我想知道如何做到这一点,并且不要在路由器和控制器之间拆分逻辑。所以我做了一些研究,发现 Todd Motto 建议在控制器中创建 resolve 函数,而不是在路由器中使用它:
main.controller.coffee
(->
Main = (someService) ->
@data = someService.data
return
Main.resolve = () ->
someService: (someService) ->
someService.getAll()
Main
.$inject = ['someService']
angular
.module('app')
.controller('Main', Main)
)()
app.routes.coffee
(->
routes = ($stateProvider, $urlRouterProvider) ->
$urlRouterProvider.otherwise "/home"
$stateProvider
.state 'main',
url: '/'
templateUrl: 'app/layout/main.html'
resolve: Main.resolve
controller: 'Main'
controllerAs: 'main'
routes.$inject = ['$stateProvider', '$urlRouterProvider']
angular
.module('app')
.config(routes)
)()
问题是,当我将所有模块包装在 IIFE 中时(以避免污染全局命名空间),路由器中的主控制器不可访问(未定义)。有人可以建议我如何解决这个问题吗?
【问题讨论】:
-
你可以将resolve函数与你的控制器解耦,在resolve中进行一些登录并将其附加到$scope,然后它应该可以从你的控制器访问。
-
Avraam,我需要来自主控制器的解析可以在路由器中访问,如下所示:Main.resolve
标签: angularjs coffeescript angular-ui-router iife