Да, для перенаправления с одного маршрута на другой вы не должны использовать location.go
, обычно он используется для получения normalized url
в браузере.
Location docs строго упомянутое ниже примечание.
Примечание. Для изменения маршрута лучше использовать службу маршрутизатора. Используйте Location только в том случае, если вам нужно взаимодействовать или создавать нормализованные URL-адреса вне маршрутизации.
Вместо этого вам следует использовать метод Router
API navigate
, который будет принимать ['routeName']
, как вы это делаете при создании href
с помощью директивы [routerLink]
.
Если вы хотите перенаправить только через URL-адрес, вы можете использовать navigateByUrl
, который принимает URL как строку типа router.navigateByUrl(url)
import {
ROUTER_DIRECTIVES,
RouteConfig,
ROUTER_PROVIDERS,
Location, //note: in newer angular2 versions Location has been moved from router to common package
Router
} from 'angular2/router';
constructor(location: Location,
public _userdetails: userdetails,
public _router: Router){
this.location = location;
}
login(){
if (this.username && this.password){
this._userdetails.username = this.username;
//I assumed your `/home` route name is `Home`
this._router.navigate(['Home']); //this will navigate to Home state.
//below way is to navigate by URL
//this.router.navigateByUrl('/home')
}
else{
console.log('Cannot be blank');
}
}
Обновить
В ходе дальнейшего исследования я обнаружил, что когда вы вызываете navigate
, в основном он принимает routeName
внутри массива, и если параметры есть, то должны пройти с ним, как ['routeName', {id: 1, name: 'Test'}]
.
Ниже приведен API navigate
функции Router
.
Router.prototype.navigate = function(linkParams) {
var instruction = this.generate(linkParams); //get instruction by look up RouteRegistry
return this.navigateByInstruction(instruction, false);
};
Когда linkParams
передается в функцию generate
, она возвращает все Инструкция требуется для навигации по другому компоненту. Здесь Instruction
означает ComponentInstruction
. , которые содержат всю информацию о маршрутизации, в основном то, что мы регистрируем внутри @RouteConfig
, будет добавлено к RouteRegistry
(например, о том, что path
, которое Component
должно назначить router-outlet
).
Теперь извлеченная инструкция передается методу navigateByInstruction
, который отвечает за загрузку компонента и делает различные вещи доступными для компонента, такие как urlParams
и инструкции родительского и дочернего компонентов, если они есть.
Инструкция (в консоли)
auxInstruction: Object //<- parent instructions
child: null //<- child instructions
component: ComponentInstruction //<-current component object
specificity: 10000
urlParams: Array[0] <-- parameter passed for the route
urlPath: "about" //<-- current url path
Примечание. Полный ответ основан на более старой версии маршрутизатора, когда Angular 2 находился в бета-версии.
person
Pankaj Parkar
schedule
21.02.2016
router.navigate(['your route'])
- person Pardeep Jain   schedule 21.02.2016