location.go()不会以角度2重定向用户

时间:2017-03-17 13:19:57

标签: angular typescript angular2-routing

我正在进行登录检查。一旦成功,我想将用户重定向到同一应用程序中的另一个页面。我有以下代码来做到这一点。

import { Component } from '@angular/core';
import { FormGroup, FormControl, Validators, FormBuilder } from '@angular/forms';
import { DataService } from '../services/data.service';
import {Location, LocationStrategy, PathLocationStrategy} from '@angular/common';

@Component({
  selector: 'app-login',
  templateUrl: './login.component.html',
   providers: [Location, {provide: LocationStrategy, useClass: PathLocationStrategy}],
  styleUrls: ['./login.component.css'],

})
export class LoginComponent   {

static location:Location;

  constructor(private formBuilder: FormBuilder,
              private dataService: DataService,location: Location) {
                LoginComponent.location = location;

      this.loginForm = this.formBuilder.group({
      username: this.username,
      password: this.password
    });
  }

  loginForm : FormGroup;
  username = new FormControl('', Validators.required);
  password = new FormControl('', Validators.required);

Login(){

  this.dataService.doLogin(this.loginForm.value.username,this.loginForm.value.password).subscribe(function(res){
       console.log(LoginComponent.location)
       LoginComponent.location.go('/report');
     },function(err){
        console.log("Err",err)
      });;
}

}

但问题是,浏览器中的网址已更改为http://localhost:3000/report。但是当页面没有加载时。当我点击重新加载时,会显示新页面。

此代码有什么问题? location.go()无法加载网址。

1 个答案:

答案 0 :(得分:6)

如果使用角度路由器,则使用位于angular / router命名空间的Router类。 看看这个 Angular Router Navigation example。 我认为这将有助于解决您的问题。 Location class旨在与URL进行交互,但不在应用程序路径中导航(就像在角度1中那样)。

引用那篇关于位置类的文章:“

  

注意:最好使用路由器服务来触发路由更改。仅当您需要在路由之外进行交互或创建规范化URL时才使用位置。