angularjs - 带有 ui-router 的 Angular Material md-tabs 不加载初始选项卡

标签 angularjs angular-ui-router angular-material

用例

我有一个同时使用 angular-material (v1.0.0) 和 ui-router (v0.2.15) 的应用程序,并尝试让父状态具有显示在 md-tabs/md-tab 中的子状态。

问题

我可以正常工作,但没有加载初始选项卡。只有在点击选项卡后,它们的状态才会被加载。

代码

angular.module('demoApp', ['ui.router', 'ngMaterial'])

  .config(function ($stateProvider, $urlRouterProvider) {
    $stateProvider.state('tabs', {
      url: '/tabs',
      template: '<div>' +
                '  <h1>Tabs View</h1>' +
                '  <md-tabs>' +
                '    <md-tab label="Foo" ui-sref="tabs.foo">' +
                '    </md-tab>' +
                '    <md-tab label="Bar" ui-sref="tabs.bar">' +
                '    </md-tab>' +
                '  </md-tabs>' +
                '  <md-content ui-view></md-content>' +
                '</div>'
    });
    $stateProvider.state('tabs.foo', {
      url: '/tabs/foo',
      template: 'Hello from Foo'
    });
    $stateProvider.state('tabs.bar', {
      url: '/tabs/bar',
      template: 'Hello from Bar'
    });
    $urlRouterProvider.when('/tabs', '/tabs/foo');
    $urlRouterProvider.otherwise('/tabs');
  })

;
<!DOCTYPE html>
<html ng-app="demoApp">
<head>
  <link rel="stylesheet" href="https://rawgit.com/angular/bower-material/v1.0.0/angular-material.css">

  <script src="//rawgit.com/angular/bower-angular/master/angular.js"></script>
  <script src="//rawgit.com/angular/bower-angular-aria/master/angular-aria.js"></script>
  <script src="//rawgit.com/angular/bower-angular-animate/master/angular-animate.js"></script>
  <script src="//rawgit.com/angular/bower-material/v1.0.0/angular-material.js"></script>
  <script src="//rawgit.com/angular-ui/ui-router/master/release/angular-ui-router.js"></script>
  <meta charset="utf-8">
  <title>Example</title>
</head>
  
<body>
  
  <div ui-view></div>
  
</body>
</html>

See my example at jsbin .

最佳答案

如果您将 jsbin 输出打开到另一个窗口,以便您可以查看 url,您将看到重定向到 /foo 不起作用。

  1. 您必须先配置 urlRouterProvider,然后再配置 stateProvider

  2. 另外,来自 ui-router wiki :

    When using url routing together with nested states the default behavior is for child states to append their url to the urls of each of its parent states.

所以 /tabs/foo 必须变成 /foo,和 /tabs/bar 一样。

(如果你想要绝对 url,你可以使用 url: '^/foo', )

所以你的代码变成:

angular.module('demoApp', ['ui.router', 'ngMaterial'])

.config(function ($stateProvider, $urlRouterProvider) {
    $urlRouterProvider.when('/tabs', '/tabs/foo');
    $urlRouterProvider.otherwise('/tabs');

    $stateProvider.state('tabs', {
        url: '/tabs',
        template: '<div>' +
        '  <h1>Tabs View</h1>' +
        '  <md-tabs>' +
        '    <md-tab label="Foo" ui-sref="tabs.foo">' +
        '    </md-tab>' +
        '    <md-tab label="Bar" ui-sref="tabs.bar">' +
        '    </md-tab>' +
        '  </md-tabs>' +
        '  <md-content ui-view></md-content>' +
        '</div>'
    });
    $stateProvider.state('tabs.foo', {
        url: '/foo',
        template: 'Hello from Foo'
    });
    $stateProvider.state('tabs.bar', {
        url: '/bar',
        template: 'Hello from Bar'
    });
});

工作 jsbin

关于angularjs - 带有 ui-router 的 Angular Material md-tabs 不加载初始选项卡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34284925/

相关文章:

angularjs - $ route.reload()不适用于ui-router

html - Angular Material 使页眉和页脚变得粘稠

javascript - 在 AngularJS Material Design 中,如何隐藏 `md-toolbar` 中的溢出文本?

html - 我将与 ng-include 一起使用什么文件路径?

javascript - 使用 AngularJS 在 html 页面中显示 JSON 答案

javascript - Ui-router加载状态,那我怎么运行一个函数呢?

angularjs - 更改 Angular Material 中 md-autocomplete 中的选定值

javascript - Angular 保持对象通过应用程序同步

javascript - 如何使用 Angular 在页面加载时设置事件状态

javascript - Uncaught Error : [$injector:nomod] for Component