【问题标题】:Angular 2 - Is routing allowed only in child component?Angular 2 - 仅在子组件中允许路由吗?
【发布时间】:2016-06-23 06:36:23
【问题描述】:

我有一个主组件作为根组件

<tracker-module></tracker-module>

在主要组件下,我有如下子组件:

   <header></header>
     <left-navigation></left-navigation>
     <my-app>
     </my-app>
    <footer></footer>

通过上述结构,所有子组件都可以完美呈现(因为这些组件没有路由,只有 html)。

但是,我不打算计算页面内容组件,因为它包含到不同视图的路由(只有页面的主要内容随着页眉、页脚和左侧导航的变化而变化)。我不确定为什么?对此的任何想法都会有很大帮助。

我的 boot.ts:

import {bootstrap} from 'angular2/platform/browser';
import {provide} from 'angular2/core';
import {TrackerComponent} from './tracker.component';
import {enableProdMode} from 'angular2/core';
import {Http, HTTP_PROVIDERS, Headers} from 'angular2/http';
import 'rxjs/Rx';
//enableProdMode();
bootstrap(TrackerComponent, []);

main.component.ts:

import {Component, ElementRef, AfterViewInit, AfterViewChecked, OnInit, OnDestroy, DoCheck, Input, Output, SimpleChange, EventEmitter, ContentChild, ContentChildren, Renderer, IterableDiffers, Query, QueryList, TemplateRef} from 'angular2/core';

import {Http, HTTP_PROVIDERS, Headers}    from 'angular2/http';
import {CRUDService} from './service/CRUDService';
import {APIService} from './service/APIService';
/* Header, Footer, Left Navigation and my-app components*/
import {Header} from './Shared/layout/header/Header';
import {Footer} from './Shared/layout/footer/Footer';
import {LeftNavigation} from './Shared/layout/left-navigation/LeftNavigation';
import {AppComponent} from './app.component';
/* Header, Footer, Left Navigation and my-app components*/

@Component({
    selector: 'tracker-module',
    templateUrl: 'app/tracker.component.html',
    directives: [Header,Footer,LeftNavigation,AppComponent]
})
export class TrackerComponent {
    constructor() {}
    ngOnInit() {}
}

page.component.ts:

import {Component, ElementRef, AfterViewInit, AfterViewChecked, OnInit, OnDestroy, DoCheck, Input, Output, SimpleChange, EventEmitter, ContentChild, ContentChildren, Renderer, IterableDiffers, Query, QueryList, TemplateRef} from 'angular2/core';
import {ROUTER_PROVIDERS,LocationStrategy,HashLocationStrategy} from 'angular2/router';
import {TrackerUserAdmin} from "./Tracker/TrackerUserAdmin/TrackerUserAdmin";
import {CreateUserAdmin} from "./Tracker/CreateUserAdmin/CreateUser";
import {EditUserAdmin} from "./Tracker/EditUserAdmin/EditUser";
import {TrackerGroupAdmin} from "./Tracker/TrackerGroupAdmin/TrackerGroupAdmin";
import {CreateGroupAdmin} from "./Tracker/CreateGroupAdmin/CreateGroup";
import {EditGroupAdmin} from "./Tracker/EditGroupAdmin/EditGroup";
import {SavedSearch} from "./Tracker/SavedSearchAdmin/SavedSearch";
import {ResponseDateRules} from "./Tracker/ResponseDateRules/ResponseDateRules";
import {EditResponseDateRules} from "./Tracker/EditResponseDateRules/EditResponseDateRules";
import {CreateTicket} from "./Tracker/CreateTicket/CreateTicket";
import {TicketMaintenance} from "./Tracker/TicketMaintenance/TicketMaintenance";
import {TicketSearch} from "./Tracker/TicketSearch/TicketSearch";
/* Header and Footer*/
import {provideRouter, RouteConfig, Router, ROUTER_DIRECTIVES} from 'angular2/router';
import {Http, HTTP_PROVIDERS, Headers}    from 'angular2/http';
import {CRUDService} from './service/CRUDService';
import {APIService} from './service/APIService';
/* Header and Footer*/

@Component({
    selector: 'my-app',
    templateUrl: 'app/app.component.html',
    directives: [ROUTER_DIRECTIVES],
    providers: [ROUTER_PROVIDERS]
})
@RouteConfig([
    { path: '/TrackerUserAdmin', name: 'TrackerUserAdmin', component: TrackerUserAdmin },
    { path: '/CreateUserAdmin', name: 'CreateUserAdmin', component: CreateUserAdmin },
    { path: '/EditUserAdmin', name: 'EditUserAdmin', component: EditUserAdmin },
    { path: '/TrackerGroupAdmin', name: 'TrackerGroupAdmin', component: TrackerGroupAdmin },
    { path: '/CreateGroupAdmin', name: 'CreateGroupAdmin', component: CreateGroupAdmin },
    { path: '/EditGroupAdmin', name: 'EditGroupAdmin', component: EditGroupAdmin },
    { path: '/SavedSearch', name: 'SavedSearch', component: SavedSearch },
    { path: '/ResponseDateRules', name: 'ResponseDateRules', component: ResponseDateRules },
    { path: '/EditResponseDateRules', name: 'EditResponseDateRules', component: EditResponseDateRules },
    { path: '/CreateTicket', name: 'CreateTicket', component: CreateTicket },
    { path: '/TicketMaintenance', name: 'TicketMaintenance', component: TicketMaintenance },
    { path: '/TicketSearch', name: 'TicketSearch', component: TicketSearch, useAsDefault: true }

])
export class AppComponent {
    constructor(private router: Router) {
        router.subscribe((val) => { /*whatever*/
            // alert("page verfication");
        });
    }
    //Do nothing
    ngOnInit() {
        alert("page verfication");
    }
}

但是我的 page.component.ts 中的警报确实有效。

【问题讨论】:

  • 我不知道我在回答中的建议是否能完全解决您的问题,但这是第一步。我在您提供的代码中看不到任何&lt;router-outlet&gt;。对我来说,目前尚不清楚实际问题是什么。您正在采取的确切步骤是什么,预期的行为是什么,实际的行为是什么?浏览器控制台中是否有任何错误消息?
  • Gunter,路由器插座将在我的 page-component.html 中。我的控制台中没有收到任何特定的错误消息。只是,我没有让路由器在我的子组件中工作。
  • 我只是想确保您知道您使用的是已弃用的路由器。 RC.3 包含一个完全不同的路由器。您确定要花时间弄清楚它在旧路由器中的工作原理吗?
  • 如果您有子路由,则父路由的路径需要以/... 结尾。你会得到一个错误。我建议您创建一个 Plunker 来演示您尝试完成的工作(简化代码,因为我认为您不需要 12 个组件和路线来讨论和理解基本原理。
  • 我已经用仅在一个地方使用的 ROUTE_PROVIDERS 更新了问题。

标签: angularjs angular angular2-routing


【解决方案1】:

不要多次提供ROUTER_PROVIDERS。在您的根组件的bootstrap(...)@Component() 中,但没有其他地方。

【讨论】:

  • Gunter,这是否意味着如果我必须在我的页面内容组件中使用路由,我可以在我的引导程序中使用一次,如下所示? bootstrap(TrackerComponent, [ ROUTER_PROVIDERS, 提供(LocationStrategy, {useClass: HashLocationStrategy}) ]);我的页面仍然不能仅使用一个 ROUTER_PROVIDERS :(
  • 正如我在您的问题下方的评论中提到的,信息不足。
【解决方案2】:

我你的 main.component.ts 你正在使用 &lt;page-content&gt;&lt;/page-content&gt; 但没有任何选择器 &lt;page-content&gt;&lt;/page-content&gt; 但在你的 app.component.ts 文件选择器是 'my-app' 并且你正在使用 &lt;page-content&gt;&lt;/page-content&gt;。请将其更改为 @ 987654326@那为什么没有显示任何东西。

【讨论】:

  • Mohammad,你能再检查一下这个问题吗?我已经修改了问题以供您理解。以上是我的实际 HTML,之前的 HTML 是为了全面了解我的问题。不过很抱歉。
猜你喜欢
  • 2019-03-10
  • 1970-01-01
  • 2017-11-20
  • 2016-12-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-02
相关资源
最近更新 更多