javascript - 将子路由设为默认

标签 javascript angularjs angular-ui-router

我在这里问了一个类似的案例,但后来我发现这并不是我想要做的:

Child route does not trigger

这是一个新版本:

HTML

  <body ng-app="plunker">
    <div>
      <a ui-sref="admin">Admin</a>
      <a ui-sref="user">User</a>
    </div>
    <div ui-view></div>  
  </body>

JS

var app = angular.module('plunker', ['ui.router']);

app.config(function ($stateProvider, $urlRouterProvider) {
  $urlRouterProvider
    .when('/', '/admin/dashboard')
    .when('/admin', '/admin/dashboard')
    .when('/user', '/user/dashboard')
    .otherwise('/admin/dashboard');

  $stateProvider
    .state('admin.dashboard', {
      url: '/admin/dashboard',
      resolve: {
        test: function() {
          console.log('called admin');
          return;
        }
      },
      template: '<div>admin navigation. Go <a ui-sref="admin.link1">link1</a></div>'
    })
    .state('admin.link1', { //for some reason admin.link1 does not work but just link1 is OK
      url: '/admin/link1',
      resolve: {
        test: function() {
          console.log('admin.link1 called resolve');
          return;
        }
      },
      template: '<div>admin link1</div>'
    })
    .state('user', {
      url: '/user/dashboard',
      template: '<div>user dashboard</div>'
    });
});

代码:http://plnkr.co/edit/NYdWC1j9xskQnY8LjJkZ?p=preview

要求

  1. 我不需要为父路由呈现任何内容 ( admin )

  2. 默认重定向为 /admin/dashboard

  3. 我需要将 url 正确构造为 /admin 的子级因为上一个问题,结果是/admin/dashboard/admin/link1

  4. 我确实需要 adminuser parent 。需要 child 的关系。这个以后会用到。

问题

  1. 现在我无法显示像 admin.dashboard 这样的子路由.它只是空白。如何显示dashboard默认情况下?

  2. 如果我添加下面的行来显示 admin模板,甚至这个 ui-sref="admin.dashboard"不会带我去正确的dashboard子路由

javascript .state('admin', { url: '/admin', template: '<div>admin. Go <a ui-sref="admin.dashboard">dashboard</a></div>' })

最佳答案

有一个updated plunker .为了简单起见,我首先更改了状态的名称'admin.dashboard'进入:

.state('admin_dashboard', {
  url: '/admin/dashboard',
  ...

原因是,任何在这里都被视为子状态。我们现在可以(但不是必须)介绍admin 的子状态,以解释如何调用它state。妥妥的……

这些是<a> 内部的调用 中的重要变化。

工作 ui-sref(原始)

<div>
  <a ui-sref="admin">Admin</a>
  <a ui-sref="user">User</a>
</div>

工作 ui-sref

<div>
  <a ui-sref="admin_dashboard">Admin</a>
  <a ui-sref="user">User</a>
</div>

工作 href

<div>
  <a href="#/">Admin as <samp>'/'</samp></a>
  <a href="#/admin">Admin as <samp>'/Admin'</samp></a>
  <a href="#/user">User</a>
</div>

正如我们所见,ui-sref必须包含州名,而 href可以(必须)包含 url,即使是在 when() 中定义的那个

检查更新的 example ...

更新:

如果我们想和父子一起去,我们可以这样设置

$stateProvider
     .state('admin', {
       url: '/admin',
       template: '<div>admin. Go <a ui-sref="admin.dashboard">dashboard</a>' + 
       '<div ui-view=""></div>' +
       '</div>'
     })
    .state('admin.dashboard', {
      url: '/dashboard',
      resolve: {
        test: function() {
          console.log('called admin');
          return;
        }
      },
      template: '<div>admin navigation. Go <a ui-sref="admin.link1">link1</a></div>'
    })
    .state('admin.link1', { 
      url: '/link1',
      resolve: {
        test: function() {
          console.log('admin.link1 called resolve');
          return;
        }
      },
      template: '<div>admin link1</div>'
    })
    .state('user', {
      url: '/user/dashboard',
      template: '<div>user dashboard</div>'
    });

这些就是 anchor

工作 ui-sref(原始)

<div>
  <a ui-sref="admin">Admin</a>
  <a ui-sref="user">User</a>
</div>

工作 ui-sref

<div>
  <a ui-sref="admin.dashboard">Admin</a>
  <a ui-sref="user">User</a>
</div>

工作 href

<div>
  <a href="#/">Admin as <samp>'/'</samp></a>
  <a href="#/admin">Admin as <samp>'/Admin'</samp></a>
  <a href="#/user">User</a>
</div>

和更新的plunker

关于javascript - 将子路由设为默认,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24922311/

相关文章:

javascript - element.parentNode.removeChild() 方法在 Internet Explorer 中不起作用

javascript - 在不遵循 css 的 javascript 中打印页面

javascript - grunt-ngdoc 没有为我的 ngdoc 文档渲染示例

AngularJS:如何等待 $resource 完成?

javascript - 获取变量后加载 Angular Directive(指令)

javascript - UI 路由器并链接到其他页面上的 anchor 标记?

javascript - Angular UI Router - 继承状态下的 View

javascript - 如何找到最大: value of colorAxis for highMaps drilldown maps

javascript - 单击其他元素时模糊(取消焦点)元素

javascript - Angular 根据状态添加主体类