Angular2 beta获得异常“没有路由器提供商!(RouterLink - >路由器)”

时间:2016-02-04 19:54:44

标签: typescript angular angular2-routing

我两天来一直在反对这个问题。我试图在Angular2 beta0.0.2中实现一些简单的路由。请注意,我使用的是打字稿

所以我理解的是,我需要使用 ROUTER_PROVIDERS 引导我的根应用程序组件,以便我的应用程序可以使用这些服务 AND 设置组件的指令想要实现到 ROUTER_DIRECTIVES 的路由。

这就是我所拥有的:

//ANGULAR  ******************************
import {provide, Component} from 'angular2/core';
import {bootstrap} from 'angular2/platform/browser';
import {
        APP_BASE_HREF,
        ROUTER_DIRECTIVES,
        ROUTER_PROVIDERS,
        HashLocationStrategy,
        LocationStrategy,
        RouteConfig,
        } from 'angular2/router';

//COMPONENTS  ******************************
import {ShiftCalendarComponent} from './components/calendar/shift-calendar.component';
import {ShiftAdminComponent} from './components/admin/shift-admin.component';
import {ShiftListComponent} from './components/shifts/shift-list.component';

//CLASS  ******************************
@Component({
    selector: 'shift-app',
    directives: [ROUTER_DIRECTIVES],
    template: `<div>
                 <nav>
                     <h3> Navigation: </h3>
                     <ul>
                         <li><a [routerLink]="['Calendar']" > Home </a></li>
                         <li><a [routerLink]="['Admin']" > About </a></li>
                         <li><a [routerLink]="['Shifts']" > Contact us </a></li>
                     </ul>
                 </nav>            
                 <router-outlet></router-outlet>
             </div>`
})
@RouteConfig([
    { path: '/', name: 'root', redirectTo: ['/Calendar'] },
    { path: '/calendar', name: 'Calendar', component: ShiftCalendarComponent },
    { path: '/admin', name: 'Admin', component: ShiftAdminComponent },
    { path: '/shifts', name: 'Shifts', component: ShiftListComponent }
])
export class ShiftApp { } 

//BOOTSTRAP   ******************************
    bootstrap(ShiftApp, [
        ROUTER_PROVIDERS, 
        provide(LocationStrategy, { useClass: HashLocationStrategy }),
        provide(APP_BASE_HREF, { useValue: '/' })    
    ]);

角度应用程序加载并显示模板,但没有链接工作,我在控制台中收到以下错误:

  

例外:没有路由器提供商! (RouterLink - &gt;路由器)angular2.dev.js

在我的index.html(我称之为view.html)中,我已链接到所有相关库并包含 router.dev.js ,我的控制台的sources选项卡显示所有已成功加载所需的脚本。

我已经阅读了有关Angular2和整个路由器文档的路由器链接错误的每个堆栈溢出问题,但无法找到为什么我的工作不正常。据我所知,我的代码匹配the Angular2 Documentation

This documentation表明ROUTER_DIRECTIVES包含了RouterOutlet和RouterLink等指令

问题?

如果我成功将组件的指令设置为 ROUTER_DIRECTIVES ,为什么我会收到“No Router for Router!RouterLink”错误?

3 个答案:

答案 0 :(得分:2)

将引导过程移动到单独的文件中:

import {bootstrap} from 'angular2/platform/browser';
import {provide, Component} from 'angular2/core';
import {ShiftApp} from './app.component';

import {
    APP_BASE_HREF,
    ROUTER_DIRECTIVES,
    ROUTER_PROVIDERS,
    HashLocationStrategy,
    LocationStrategy
} from 'angular2/router';

bootstrap(ShiftApp, [
    ROUTER_PROVIDERS,
    provide(LocationStrategy, { useClass: HashLocationStrategy }),
    provide(APP_BASE_HREF, { useValue: '/' })
]);

在index.html中导入该新文件:

System.config({
    packages: {
        app: {
            format: 'register',
            defaultExtension: 'js'
        }
    }
});
System.import('app/boot')
    .then(null, console.error.bind(console));

可以找到here的优点。

同样如评论中所述,引导您的根组件而不是子组件。

答案 1 :(得分:1)

解决方案是注入boot.ts(引导加载程序文件)

import {bootstrap} from 'angular2/platform/browser'
import {AppComponent} from './app.component'
import {ROUTER_PROVIDERS} from 'angular2/router';

bootstrap(AppComponent, [ROUTER_PROVIDERS]);

这解决了我的问题。

答案 2 :(得分:0)

我遇到问题“EXCEPTION:没有路由器的提供商!(RouterLink - &gt;路由器)”,我通过在boot.ts中进行更改来完全修复它,根据以下代码配置你的boot.ts它会工作得很好。

import {provide} from 'angular2/core';
import {bootstrap}    from 'angular2/platform/browser';
import {ROUTER_PROVIDERS, LocationStrategy, HashLocationStrategy} from 'angular2/router';
import {HTTP_PROVIDERS} from 'angular2/http';
import {AppComponent} from './app.component';


bootstrap(AppComponent, [
  ROUTER_PROVIDERS,
  provide(LocationStrategy, { useClass: HashLocationStrategy }),
  HTTP_PROVIDERS
]);