如果我使用抽象父状态,Angular不会加载状态

时间:2015-01-10 18:51:22

标签: angularjs angular-ui-router

有以下代码:

angular.module('app', ['app.animators', 'app.events', 'app.hotel', 'app.controllers', 'app.services', 'ui.router', 'templates', 'ngResource', 'ngCookies', 'ui.bootstrap', 'ngImgCrop', 'angularjs-dropdown-multiselect']).config(['$httpProvider', '$locationProvider', '$stateProvider', '$urlRouterProvider', ($httpProvider, $locationProvider, $stateProvider, $urlRouterProvider) ->
  $httpProvider.defaults.headers.common['X-CSRF-Token'] = $('meta[name=csrf-token]').attr('content')

  $urlRouterProvider.otherwise("/404")

  $stateProvider.state('signIn'
    url: '/admin/signin'
    controller: 'SignInController'
    templateUrl: 'signin.html'
  )

  $locationProvider.html5Mode(true)
])

它运作良好,但我将其更改为以下代码:

angular.module('app', ['app.animators', 'app.events', 'app.hotel', 'app.controllers', 'app.services', 'ui.router', 'templates', 'ngResource', 'ngCookies', 'ui.bootstrap', 'ngImgCrop', 'angularjs-dropdown-multiselect']).config(['$httpProvider', '$locationProvider', '$stateProvider', '$urlRouterProvider', ($httpProvider, $locationProvider, $stateProvider, $urlRouterProvider) ->
  $httpProvider.defaults.headers.common['X-CSRF-Token'] = $('meta[name=csrf-token]').attr('content')

  $urlRouterProvider.otherwise("/404")

  $stateProvider.state('admin.signIn'
    url: '/admin/signin'
    controller: 'SignInController'
    templateUrl: 'signin.html'
  ).state('admin'
    abstract: true
  )

  $locationProvider.html5Mode(true)
])

它不起作用,即我输入地址'http://localhost/admin/signin',浏览器正在加载,但我没有获得'signin.html'模板。我需要使用'admin'状态才能对所有子状态使用'resolve'函数(我的示例不完整)。有什么麻烦?提前致谢!

1 个答案:

答案 0 :(得分:2)

几乎每个家长应该有一个模板 - 一个 的目标。有a working plunker

只需将此行添加到父级定义中: template: "<div ui-view></div>" - 将使该代码正常工作:

.state('admin', {
  abstract: true,
  template: "<div ui-view></div>"
})

发生了什么 - 孩子确实有它的目标,它可以被注射的锚。

可能有其他解决方案,例如儿童正在定位根ui-view="" ...但上述解决方案是合适的...请参阅View Names - Relative vs. Absolute Names,查看此答案及其附带的更多absolute name targeting

检查行动here