如何在基本状态下解析并在使用命名视图时获得该已解析的值?

时间:2013-09-15 17:47:14

标签: angularjs coffeescript angular-ui-router

TLDR:我无法在基本状态下获得解析函数来使用来获取我的命名视图以显示正确的内容。

我有一组带有命名视图(docs here)的工作路线,如下所示:

    $stateProvider.state("index",
      url: ""
      views:
        viewA:
          templateUrl: "/partials/index.A.jade"
          controller: ($scope) ->
            console.log('index controller') # just confirming that I'm hitting this line
        viewB:
          templateUrl: "/partials/index.B.jade"
    )
    ... etc, 5+ states 

我需要添加一个通过承诺加载lodash的决心:

  resolve: util: ($q, $window) ->
    console.log 'resolving base state'
    deferred = $q.defer()
    require(["cdn-lodash"], (lodash) ->
      util = lib: lodash, logger: $window.logger
      deferred.resolve(util)
    )
    deferred.promise

如果我将此解析附加到索引状态,它可以正常工作。但是我需要lodash在许多州,所以我宁愿只为所有状态加载它(或者我可以称之为“util”,并将其添加为需要它的状态的基础:

$stateProvider.state('base',
  abstract: true
  resolve: util: ($q, $window) ->
    console.log 'resolving base state'
    deferred = $q.defer()
    require(["cdn-lodash"], (lodash) ->
      util = lib: lodash, logger: $window.logger
      deferred.resolve(util)
    )
    deferred.promise
)

$stateProvider.state("base.index",
  url: ""
  views:
    viewA:
      templateUrl: "/partials/index.A.jade"
      controller: ($scope, util) ->
        debugger
        console.log('index controller')
        console.log util
        $scope.allowAdmin = true
    viewB:
      templateUrl: "/partials/index.B.jade"

那不行,因为我的命名视图都没有加载,我只是得到一个空白页面。然而,决心正在受到打击。页面加载正常,没有错误,layout.jade中的页眉等正在加载。所以我尝试将A / B视图添加到base状态:

  views:
    viewA: templateUrl: ''
    viewB: templateUrl: ''

Crud,现在视图正在加载,但不正确。 A视图在标记中两次,而B视图(在索引页面上为空)根本不存在。在短期内,我认为我可以通过在州声明之外创建一个解析函数并将其置于每个州的决心来解决这个问题。

另外还有一个复杂因素:我的大多数控制器都在他们自己的文件中声明,因此视图行看起来像:

  views:
    viewA:
      controller: 'adminUserList' # <<<<<<<--------- this line
      templateUrl: "/partials/admin/user/list.A.jade"
    viewB:
      templateUrl: "/partials/admin/user/list.B.jade")

0 个答案:

没有答案