Jun*_*iuz 5 asp.net-mvc angular2-routing angular
在home.component.html页面中,我希望按钮在单击时将URL重定向到新页面。
我希望当我单击按钮时,当前url http://localhost:24282/home将被重定向到该URL http://localhost:24282/master并master.component.html显示页面。
问题是,尽管http://localhost:24282/master当我单击按钮时将URL重定向到,但是我仍然在当前页面上home.component.html。我没有完全重定向到母版页master.component.html
下面是实现。
应用程序路由
import { ModuleWithProviders } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
import { HomeComponent } from './Components/home.component';
import { MasterComponent } from './Components/master/master.component';
import { PageNotFoundComponent } from "./Components/common/page-not-found.component";
const appRoutes: Routes = [
{ path: 'home', component: HomeComponent },
{ path: 'master', component: MasterComponent },
{ path: '', redirectTo: 'home', pathMatch: 'full' },
{ path: '**', component: PageNotFoundComponent }
];
export const routing: ModuleWithProviders = RouterModule.forRoot(appRoutes);
Run Code Online (Sandbox Code Playgroud)
app.module.ts
import { NgModule } from '@angular/core';
import { APP_BASE_HREF } from '@angular/common';
import { BrowserModule } from '@angular/platform-browser';
import { AppComponent } from './app.component';
import { routing } from './app.routing';
import { HomeComponent } from './Components/home.component';
import { MasterComponent } from './Components/master/master.component';
import { PageNotFoundComponent } from "./Components/common/page-not-found.component";
@NgModule({
imports: [BrowserModule, routing],
declarations: [AppComponent, HomeComponent, MasterComponent, PageNotFoundComponent],
providers: [{ provide: APP_BASE_HREF, useValue: '/' }],
bootstrap: [AppComponent]
})
export class AppModule {}
Run Code Online (Sandbox Code Playgroud)
app.component.ts-定义newChange()方法的位置
import { Component } from '@angular/core';
import { Router } from '@angular/router';
@Component({
selector: 'moc-landing',
templateUrl: './app/Components/home.component.html',
styleUrls: ['./app/Components/home.component.css']
})
export class AppComponent {
constructor(private router: Router) {}
newChange(): void {
this.router.navigateByUrl('master');
}
}
Run Code Online (Sandbox Code Playgroud)
home.component.html
<button id="new" class="btn btn-primary" (click)="newChange()">New Change Request</button>
我不确定我是否已正确使用router.navigateByUrl或是否有其他替代方法?
在ASP.NET MVC中,使用razor的URL帮助器类(例如@Url.Action)非常容易做到。
但是在Angular 4中(我是它的新手),我不知道如何实现它。我已经进行了一些研究,但找不到与此相关的任何内容。
任何帮助是极大的赞赏。
小智 8
尝试这个
<button (click)="router.navigate(['/master']);">
<span>Go to master Page</span>
</button>
Run Code Online (Sandbox Code Playgroud)
要么
在您的home.html中
<button (click)="goToPage('master')">
<span>Go to master Page</span>
</button>
Run Code Online (Sandbox Code Playgroud)
并且在您的家庭组件中
import { Router } from '@angular/router';
constructor(private router: Router){
}
function goToPage(pageName:string){
this.router.navigate([`${pageName}`]);
}
Run Code Online (Sandbox Code Playgroud)
我同意 Veena K. Suresh 的解决方案,即通过单击事件进行导航,但您也可以通过相同的技巧传递数据
router模块导入到 您当前的组件中,例如:import { Router } from '@angular/router';
Run Code Online (Sandbox Code Playgroud)
constructor(
private router: Router
) { }
Run Code Online (Sandbox Code Playgroud)
import { Router } from '@angular/router';
Run Code Online (Sandbox Code Playgroud)
如果您使用链接 ( <a>),则只需要routerLink指令/参数:
<a class="btn" routerLink="/votes">Check votes</a>
Run Code Online (Sandbox Code Playgroud)
如果您使用按钮 ( <button>),则需要一个(click)事件:
<button class="btn" (click)="goToVotes()">Check votes</button>
Run Code Online (Sandbox Code Playgroud)
在这种情况下最好创建一个函数/方法,因为在组件的构造函数中保留私有参数是一个很好的做法,即不要直接在 HTML 上使用router.navigate()(避免“路由器”警告,因为使用组件的私有成员)。
import { Component } from '@angular/core';
import { Router } from '@angular/router';
// component details here...
export class MyComponent {
constructor(private router: Router){ }
goToVotes($myParam: string = ''): void {
const navigationDetails: string[] = ['/votes'];
if($myParam.length) {
navigationDetails.push($myParam);
}
this.router.navigate(navigationDetails);
}
}
Run Code Online (Sandbox Code Playgroud)
该goToVotes上述方法也将第二值添加到导航的阵列如果参数不是空的,并因此:
<button class="btn" (click)="goToVotes('ca')">Go vote</button>
Run Code Online (Sandbox Code Playgroud)
将重定向到/votes/ca.
navigateByUrl 始终希望使用绝对URL。
i.e. router.navigateByUrl("/team/33/user/11");
Run Code Online (Sandbox Code Playgroud)
如果要提供相对路线,则可以使用navigate:
router.navigate(['team', 33, 'user', 11], {relativeTo: route});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
26782 次 |
| 最近记录: |