【问题标题】:Angular Material Tabs + ui-router: body not loadingAngular Material Tabs + ui-router:正文未加载
【发布时间】:2015-05-20 17:12:59
【问题描述】:

更新:在 Angular Material 0.10.0 中修复了 ui-srefmd-tabs 的使用

首先,我们知道有几个与此类似的问题。 但是,我们已经尝试了几个小时,但仍然没有运气,所以让我们看看是否有人可以对这个特殊情况有所了解。

我们试图有两个选项卡,两个不同的视图和两个不同的控制器。

标签呈现正常,它们工作,并且标签更改时 URL 更改,但标签“正文”从未加载。

ui-sref 被定义在一个 span 中以避免https://github.com/angular/material/issues/2344

模块配置

  function testRouteConfig($stateProvider) {
    $stateProvider
      .state('testTabs', {
        abstract: true,
        url: '/test/tabs',
        templateUrl: 'modules/test/test.html',
        controller: 'TestController as vm'
      })
      .state('testTabs.testMain', {
        url: '/test/main',
        data: {
          'selectedTab': 0
        },
        views: {
          'testMain': {
            templateUrl: 'modules/test/main/mainTest.html',
            controller: 'MainTestController as vm'
          }
        }
      })
      .state('testTabs.testAbout', {
        url: '/test/about',
        data: {
          'selectedTab': 1
        },
        views: {
          'testAbout': {
            templateUrl: 'modules/test/about/aboutTest.html',
            controller: 'AboutTestController as vm'
          }
        }
      });
  }

选项卡定义 (test.html)

<md-tabs md-selected="currentTab" md-stretch-tabs="always" class="main-toolbar">
  <md-tab>
    <md-tab-label><span ui-sref="testTabs.testMain">Profile</span></md-tab-label>
    <md-tab-body ui-view="testMain" layout="vertical" layout-fill></md-tab-body>
  </md-tab>
  <md-tab>
    <md-tab-label><span ui-sref="testTabs.testAbout">About</span></md-tab-label>
    <md-tab-body ui-view="testAbout" layout="vertical" layout-fill></md-tab-body>
  </md-tab>
</md-tabs>

主控制器

'use strict';

TestController.$inject = ['$scope'];

function TestController($scope) {
  $scope.$on('$stateChangeSuccess', function (event, toState) {
    $scope.currentTab = toState.data.selectedTab;
  });
}

module.exports = TestController;

标签正文示例

<p>{{vm.title}}</p>

标签控制器示例

'use strict';

AboutTestController.$inject = [];

function AboutTestController() {
  var vm = this;

  vm.title = 'About Test page';
}

module.exports = AboutTestController;

【问题讨论】:

    标签: angularjs tabs angular-ui-router angular-material


    【解决方案1】:

    首先,我认为您的路线并不像您希望的那样。子状态的 url (state.substate) 将附加到状态的 url。您所在州'testTabs.testMain' 的网址是/test/tabs/test/main'。如果你希望它是绝对的,你必须在前面加上^:^/test/main。或者只是通过删除标题/test 使其相对。

    如果这不起作用,请尝试绝对命名视图:

    views: {
          'testMain@testTabs': {
            templateUrl: 'modules/test/main/mainTest.html',
            controller: 'MainTestController as vm'
          }
    }
    

    【讨论】:

    • 首先感谢您的回答!但是我尝试了您所说的所有内容(以及不同的组合,结果是相同的:导航有效(URL更改),但标签正文中没有加载任何内容。我真的不确定这不是 md 的错误-tabs,因为在链接的问题中有一个没有视图的解决方法:github.com/angular/material/issues/2344
    • 我已经重现了同样的问题;体内没有任何负载,也没有显示错误。命名视图并不能解决问题。
    猜你喜欢
    • 1970-01-01
    • 2016-03-20
    • 2015-10-16
    • 1970-01-01
    • 1970-01-01
    • 2017-09-07
    • 1970-01-01
    • 2019-02-09
    • 2018-05-06
    相关资源
    最近更新 更多