15

我正在玩新的角度路由器,并想尝试一个我有一个组件和一个嵌套组件的用例。

下面是我编写的用于定义两个组件和路由的 JavaScript 代码:

angular.module('app', ['ngNewRouter'])
  .controller('AppController', function ($router) {

  $router.config([
    {
      path: '/parent',
      component: 'parent'
    }
  ]);

})
.controller('ParentController', function ($router) {

  this.name = 'Parent component';
  $router.config([
    {
      path: '/child',
      component: 'child'
    }
  ]);

})
.controller('ChildController', function () {

  this.name = 'Child component';

})
.config(function ($componentLoaderProvider) {

  $componentLoaderProvider.setTemplateMapping(function (compName) {
    return compName + '.html';
  });  

});

和 HTML 部分:

<!-- index.html -->
<body ng-controller="AppController as app">
    <a ng-link="parent">Go to parent</a>
    <div ng-viewport></div>
</body>

<!-- parent.html -->
{{ parent.name }}<br/>
<a ng-link="child">Show child</a>
<div ng-viewport></div>

<!-- child.html -->
{{ child.name }}

这是一个包含上述代码的 Plunker:http: //plnkr.co/edit/yWCFgXQI491EYvIldjyR

基于此代码,我有以下问题/问题:

  1. 如果我转到最低级别(#/parent/child)然后点击刷新,则不再显示父组件和子组件。即使 URL 仍然相同,路由也不会恢复。我是否需要重新导航或做一些事情来恢复页面的状态?这是一个非常基本的功能,可以为 URL 添加书签。
  2. 如果我转到最低级别(#/parent/child)然后单击Go to parent链接,则 URL 正确设置为#/parent但子组件仍然可见。
4

4 回答 4

0

您也可以尝试使用UI Router

如果你想使用嵌套路由,你也可以看看这个。

于 2017-12-19T09:22:01.867 回答
0

让我印象深刻的第一件事是,您没有使用任何指向要显示的父项和子项的标识符。

您如何/从哪里获得这些信息?你的 url 看起来会好很多(如果写成这样,甚至可以解决问题

/parent/:parentId/

或者

/parent/:parentId/child/:childId

我自己主要使用 routeProvider 和 routeParameters,它们提供此功能没有任何麻烦,但由于这个练习似乎纯粹是学术性的,我会尝试阅读模块实际在做什么以及检查是否有相关github问题中的问题。

此外,文档中的此页面似乎对这个问题有所了解。

如果这对您没有任何帮助,您会考虑通过向我们提供更多信息来帮助我们吗?

祝你好运!

于 2016-08-08T18:12:18.670 回答
0

这是老路#

 var app = angular.module("app", ["ngRoute"]);
app.config(function($routeProvider) {
    $routeProvider
    .when("/", {
        templateUrl : "parent.htm"
    })
    .when("/other", {
        templateUrl : "Default.htm"
    });
});

于 2017-11-27T07:11:41.747 回答
0

**Using new way we can do perform routing this .**


(function () {
  'use strict';

  angular
    .module('app', ['parent', 'home', 'ngNewRouter'])
    .controller('AppController', function ($router) {
      this.header = 'TITLE';
      $router.config([
        {
          path: '/', component: 'home'
        },
        {
          path: '/parent', component: 'parent'
        }
      ]);
    });
})();
**I hope this will work .**

于 2017-11-27T07:17:39.020 回答