【问题标题】:How better resolve data for controller in Angular + ui-router如何更好地解析 Angular + ui-router 中的控制器数据
【发布时间】: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


【解决方案1】:

你可以试试这个,

(->

      routes = ($stateProvider, $urlRouterProvider) ->

        $urlRouterProvider.otherwise "/home"

        $stateProvider
          .state 'main',
            url: '/'
            templateUr

l: 'app/layout/main.html'
        resolve: {
            main: function() {
                  return Main.resolve;
        },
        controller: 'Main'
        controllerAs: 'main'

  routes.$inject = ['$stateProvider', '$urlRouterProvider']

  angular
    .module('app')
    .config(routes)

)()

【讨论】:

  • 不幸的是,它对我不起作用。 Main 是 并且当我在 Chrome 中调试此代码时未调用它的解析函数
猜你喜欢
  • 1970-01-01
  • 2016-07-02
  • 1970-01-01
  • 2016-02-18
  • 2023-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多