【问题标题】:Angular 2 routing without navbar没有导航栏的Angular 2路由
【发布时间】:2016-08-10 09:20:20
【问题描述】:

Angular2 路由上的每个主题都有一个固定的导航栏

<nav>
    <a [routerLink]="['/component-one']">Component One</a>
    <a [routerLink]="['/component-two']">Component Two</a>
</nav>
<router-outlet></router-outlet>

所以基本上当点击组件一的链接时,这个组件将呈现在&lt;nav&gt;&lt;/nav&gt;下面

我需要的是,当您单击组件一时,完整视图(整页)会更改为组件一的视图(因此没有&lt;nav&gt;&lt;/nav&gt;

我尝试将&lt;router-outlet&gt; 放在单独的@Component

// view.component.ts    
import { Component } from '@angular/core';
import { ROUTER_DIRECTIVES } from '@angular/router';

@Component({
    selector: 'view',
    template:`<router-outlet></router-outlet>`,
    directives: [ROUTER_DIRECTIVES]
})

export class ViewComponent {

}

然后

// home.component.ts
import { Component } from '@angular/core';
import { ROUTER_DIRECTIVES } from '@angular/router';

@Component({
    selector: 'home',
    template: `
        <nav>
            <a [routerLink]="['/component-one']">Component One</a>
            <a [routerLink]="['/component-two']">Component Two</a>
        </nav>
        <router-outlet></router-outlet>
    `,
    directives: [ROUTER_DIRECTIVES]
})

export class HomeComponent {

}

App 组件如下所示:

import { Component } from '@angular/core';
import { ROUTER_DIRECTIVES } from '@angular/router';

import { HomeComponent } from './containers/home.component';

@Component({
  moduleId: module.id,
  selector: 'app-root',
  template: `
  <h1>{{title}}</h1>
  <view></view>
  <home></home>
  `,
  styleUrls: ['app.component.css'],
  directives:  [HomeComponent, ROUTER_DIRECTIVES]
})
export class AppComponent {
  title = 'app works';
}

也尝试将&lt;home&gt; 放入&lt;view&gt;,但什么也没有

总是遇到同样的错误:

错误:找不到加载“OneComponent”的主要出口

谁能帮我解决这个问题? 谢谢!

编辑

// app.routes.ts
import { provideRouter, RouterConfig } from '@angular/router';

import { ViewComponent } from './containers/view.component';
import { HomeComponent } from './containers/home.component';
import { OneComponent } from './containers/one.component';
import { TwoComponent } from './containers/two.component';

const routes: RouterConfig = [
    {
        path: '',
        redirectTo: '',
        pathMatch: 'full'
    },
    { 
        path: '', 
        component: HomeComponent, 
    },
    { 
        path: 'one', 
        component: OneComponent 
    },
    { 
        path: 'two', 
        component: TwoComponent 
    }
];

export const appRouterProviders = [
    provideRouter(routes)
];

【问题讨论】:

  • 你能粘贴你的路由器配置吗?
  • 添加到原帖

标签: angular angular2-routing angular2-router


【解决方案1】:

将您的路由移动到自己的组件

<nav>
    <a [routerLink]="['/component-one']">Component One</a>
    <a [routerLink]="['/component-two']">Component Two</a>
</nav>

并将它们注入您想要拥有它们的组件上,当您路由到该组件时,您将看到导航,当您转到另一个组件时,它们将从那里删除。

&lt;router-outlet&gt;&lt;/router-outlet&gt; 上方或下方的所有内容 将在每个页面中可用

【讨论】:

    【解决方案2】:

    你的 routerLinks 路径错误:

    <nav>
      <a [routerLink]="['/component-one']">Component One</a>
      <a [routerLink]="['/component-two']">Component Two</a>
    </nav>
    

    与您的路由器配置路径相比

     { 
        path: 'one', 
        component: OneComponent 
    },
    { 
        path: 'two', 
        component: TwoComponent 
    }
    

    将它们修复为:

    <nav>
      <a [routerLink]="['/one']">Component One</a>
      <a [routerLink]="['/two']">Component Two</a>
    </nav>
    

    【讨论】:

      【解决方案3】:

      谢谢你们的快速反应……你们都为我指明了正确的方向。

      解决方案:

      主组件只需要另一个组件来渲染视图(&lt;view&gt;&lt;/view&gt;

      // app.component.ts
      import { Component } from '@angular/core';
      import { ROUTER_DIRECTIVES } from '@angular/router';
      
      import { ViewComponent } from './containers/view.component';
      
      @Component({
        moduleId: module.id,
        selector: 'app-root',
        template: `
        <h1>
          {{title}}
        </h1>
        <view></view>
        `,
        directives:  [ViewComponent, ROUTER_DIRECTIVES]
      })
      export class AppComponent {
        title = 'app works!';
      }
      

      视图组件只包含&lt;router-outlet&gt;&lt;/router-outlet&gt;

      // view.component.ts
      import { Component } from '@angular/core';
      import { ROUTER_DIRECTIVES } from '@angular/router';
      
      @Component({
          selector: 'view',
          template:`<router-outlet></router-outlet>`,
          directives: [ROUTER_DIRECTIVES]
      })
      
      export class ViewComponent {  
      }
      

      路线必须正确(哎呀)

      // app.routes.ts
      import { provideRouter, RouterConfig } from '@angular/router';
      
      import { HomeComponent } from './containers/home.component';
      import { OneComponent } from './containers/one.component';
      import { TwoComponent } from './containers/two.component';
      
      const routes: RouterConfig = [
          {
              path: '',
              redirectTo: '/home',
              pathMatch: 'full'
          },
          { 
              path: 'home', 
              component: HomeComponent, 
          },
          { 
              path: 'one', 
              component: OneComponent 
          },
          { 
              path: 'two', 
              component: TwoComponent 
          }
      ];
      
      export const appRouterProviders = [
          provideRouter(routes)
      ];
      

      然后它只是构建视图(页面)

      // home.components.ts
      import { Component } from '@angular/core';
      import { ROUTER_DIRECTIVES } from '@angular/router';
      
      import { NavigationComponent } from './navigation.component';
      
      @Component({
          selector: 'home',
          template: `
              <div><h1>{{title}}</h1></div>
              <navigation></navigation>
          `,
          directives: [ROUTER_DIRECTIVES, NavigationComponent]
      })
      
      export class HomeComponent {
          title = 'This is home';
      }
      

      HomeComponent中使用的导航组件:

      // navigation.component.ts
      import { Component } from '@angular/core';
      import { ROUTER_DIRECTIVES } from '@angular/router';
      
      @Component({
          selector: 'navigation',
          template: `
              <nav>
                  <a [routerLink]="['/one']">Comp one</a>
                  <a [routerLink]="['/two']">Comp two</a>
              </nav>
          `,
          directives: [ROUTER_DIRECTIVES]
      })
      
      export class NavigationComponent {
      }
      

      // one.component.ts
      import { Component } from '@angular/core';
      
      import { ROUTER_DIRECTIVES } from '@angular/router';
      
      @Component({
          selector: 'one',
          template: `
              <p>ONE: {{message}}</p>
              <a [routerLink]="['/two']">GOTO Comp two</a>
          `,
          directives: [ROUTER_DIRECTIVES]
      })
      
      export class OneComponent {
          message = 'ONE comp here';
      }
      

      // two.component.ts
      import { Component } from '@angular/core';
      
      import { ROUTER_DIRECTIVES } from '@angular/router';
      
      @Component({
          selector: 'two',
          template: `
              <p>TWO: {{message}}</p>
              <a [routerLink]="['/one']">GOTO Comp one</a>
          `,
          directives: [ROUTER_DIRECTIVES]
      })
      
      export class TwoComponent {
          message = 'TWO here';
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-05-05
        • 2020-01-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-11-25
        • 1970-01-01
        相关资源
        最近更新 更多