router.navigate 从 angular2 中的按钮元素调用时不起作用
router.navigate doesn't work when called from button element in angular2
这是我的组件之一:
@Component({
selector: 'login-view',
templateUrl: 'app/login/login.component.html',
directives: [MATERIAL_DIRECTIVES, FORM_DIRECTIVES]
})
export class LoginComponent implements OnInit{
loginForm: ControlGroup;
constructor(
private _formBuilder: FormBuilder, private _router: Router) {
}
ngOnInit() {
// some stuffs
}
submitLoginForm(){
// to be implemented
}
goToRegister(){
this._router.navigate(['/Register']);
}
goToResetPassword(){
this._router.navigate(['/ResetPassword']);
}
}
这是上述组件的模板:
<form [ngFormModel]="loginForm" (ngSubmit)="submitLoginForm()">
<input md-input ngControl="mobileNumber" type="number" id="mobileNumber">
<input md-input type="password" ngControl="password" id="password"/>
<button md-raised-button type="submit" class="md-raised md-primary">Login</button>
<div>
// These Work
<a md-button class="md-primary" (click)="goToResetPassword()">Forgot password?</a>
<a md-button class="md-primary" (click)="goToRegister()">New here? Register</a>
//These don't work, reloads the app
<button md-button class="md-primary" (click)="goToResetPassword()">Forgot password?</button>
<button md-button class="md-primary" (click)="goToRegister()">New here? Register</button>
</div>
</form>
如果我从 <a>
的 (click)
调用 goToResetPassword()
或 goToRegister()
,它会按预期工作。
但是,它不起作用如果我将 html 元素更改为 <button>
,它只会重新加载整个应用程序,而不会在控制台中引发任何错误。
试试这个可能对你有用:-
<a type="button" class="btn "
[routerLink]="['/Foo']">{{labels.CancelBtnText}}</a>
这可能也有效
(click)="goToResetPassword();false"
防止按钮的默认提交行为。
这是我的组件之一:
@Component({
selector: 'login-view',
templateUrl: 'app/login/login.component.html',
directives: [MATERIAL_DIRECTIVES, FORM_DIRECTIVES]
})
export class LoginComponent implements OnInit{
loginForm: ControlGroup;
constructor(
private _formBuilder: FormBuilder, private _router: Router) {
}
ngOnInit() {
// some stuffs
}
submitLoginForm(){
// to be implemented
}
goToRegister(){
this._router.navigate(['/Register']);
}
goToResetPassword(){
this._router.navigate(['/ResetPassword']);
}
}
这是上述组件的模板:
<form [ngFormModel]="loginForm" (ngSubmit)="submitLoginForm()">
<input md-input ngControl="mobileNumber" type="number" id="mobileNumber">
<input md-input type="password" ngControl="password" id="password"/>
<button md-raised-button type="submit" class="md-raised md-primary">Login</button>
<div>
// These Work
<a md-button class="md-primary" (click)="goToResetPassword()">Forgot password?</a>
<a md-button class="md-primary" (click)="goToRegister()">New here? Register</a>
//These don't work, reloads the app
<button md-button class="md-primary" (click)="goToResetPassword()">Forgot password?</button>
<button md-button class="md-primary" (click)="goToRegister()">New here? Register</button>
</div>
</form>
如果我从 <a>
的 (click)
调用 goToResetPassword()
或 goToRegister()
,它会按预期工作。
但是,它不起作用如果我将 html 元素更改为 <button>
,它只会重新加载整个应用程序,而不会在控制台中引发任何错误。
试试这个可能对你有用:-
<a type="button" class="btn "
[routerLink]="['/Foo']">{{labels.CancelBtnText}}</a>
这可能也有效
(click)="goToResetPassword();false"
防止按钮的默认提交行为。