【发布时间】:2026-01-08 14:50:02
【问题描述】:
我正在疯狂地尝试在 Angular 2 上设置一个简单的测试应用程序。我有 3 个页面/组件要使用新的组件路由器加载。我已经让它半工作了。目前我有两个问题...
1 - 如果您键入要转到 Ex 的组件的路径。 “http://127.0.0.1:8080/Test2”不是加载我的 Test2 页面,而是说它找不到那条路线。
2 - 当尝试加载不同的页面时,当我第一次点击一个链接时,它会正确加载页面。当我单击链接时,所有其他页面都会抛出异常。
这是我的设置:
App.ts
import {Component, bootstrap, provide} from 'angular2/angular2';
import {ROUTER_PROVIDERS, ROUTER_DIRECTIVES, RouteConfig, APP_BASE_HREF} from 'angular2/router';
import {Test1} from './Test1';
import {Test2} from './Test2';
import {Test3} from './Test3';
@Component({
selector: 'my-app',
template: '<test1></test1><router-outlet></router-outlet>',
directives: [ROUTER_DIRECTIVES, Test1, Test2]
})
@RouteConfig([
{path: '/', as: 'Home', component: Test1},
{path: '/Test2', as: 'Test2', component: Test2},
{path: '/Test3', as: 'Test3', component: Test3}
])
class AppComponent {
constructor() {}
}
bootstrap(AppComponent, [ROUTER_PROVIDERS, provide(APP_BASE_HREF, { useValue: '/' })]);
Test1.ts
import {Component, bootstrap} from 'angular2/angular2';
import {RouterLink} from 'angular2/router';
@Component({
selector: 'test1',
templateUrl: 'app/Test1.html',
directives: [RouterLink]
})
export class Test1 { }
Test1.html
<h1> Test 1 </h1>
<a [router-link]="['/Test2']">Test Link 2</a>
Test2.ts
import {Component, bootstrap} from 'angular2/angular2';
import {RouterLink} from 'angular2/router';
@Component({
selector: 'test2',
templateUrl: 'app/Test2.html',
directives: [RouterLink]
})
export class Test2 { }
Test2.html
<h1> Test 2 </h1>
<a [router-link]="['/Test3']">Test Link 3</a>
Test3.ts
import {Component, bootstrap} from 'angular2/angular2';
import {RouterLink} from 'angular2/router';
@Component({
selector: 'test3',
templateUrl: 'app/Test3.html',
directives: [RouterLink]
})
export class Test3 { }
Test3.html
<h1> Test 3 </h1>
<a [router-link]="['/Test2']">Test Link 2</a>
感谢大家的帮助!
Yakov 的 LocationStrategy 建议解决了这个问题。 对于遇到相同问题的任何人,https://github.com/zorthgo/Angular2QuickstartTest 的完整工作代码和我的 App.ts 的工作版本如下所示:
import {Component, bootstrap, provide} from 'angular2/angular2';
import {ROUTER_PROVIDERS, ROUTER_DIRECTIVES, RouteConfig, APP_BASE_HREF, LocationStrategy, HashLocationStrategy} from 'angular2/router';
import {Test1} from './Test1';
import {Test2} from './Test2';
import {Test3} from './Test3';
@Component({
selector: 'my-app',
template: ` <a [router-link]="['/Home']">Test1 Link</a>
<a [router-link]="['/Test2', {id: 3}]">Test2 Link</a>
<a [router-link]="['/Test3']">Test3 Link</a>
<router-outlet></router-outlet>`,
directives: [ROUTER_DIRECTIVES, Test1, Test2,Test3]
})
@RouteConfig([
{path: '/', component: Test1, as: 'Home'},
{path: '/Test2/:id', component: Test2, as: 'Test2'},
{path: '/Test3', component: Test3, as: 'Test3'}
])
class AppComponent {
constructor() { }
}
bootstrap(AppComponent, [ROUTER_PROVIDERS, provide(LocationStrategy, { useClass: HashLocationStrategy })]);
【问题讨论】:
-
我认为
test3.ts @Component应该有templateurl:'app/Test3.html' -
1 出现是因为您使用的是基于标准 html5 的位置更改。在这种情况下,服务器基础架构应该执行 url 重定向,以便加载正确的内容(根内容),而不管 url 命中。
-
嗨 Chandemani,感谢您指出这一点!我已经编辑了 test3 模板 URL。好吧,但我确信这一定是一种加载不同页面的方法,只需在地址栏上键入它们的 URL。我似乎无法让它发挥作用。当我单击第一个链接时,地址显示正确的路径。但是,如果我刷新或尝试直接转到该位置,我会得到一个 Cannot GET /Test2。
-
如果有帮助,我这里有一个工作示例:syntaxsuccess.com/viewarticle/routing-in-angular-2.0
标签: angular angular-new-router