Отправлять данные по маршрутным маршрутам в Угловом
Нужно ли отправлять данные в качестве параметра с помощью router.navigate? Я имею в виду, что-то вроде этого примера, поскольку вы можете видеть, что маршрут имеет параметр данных, но при этом он не работает:
this.router.navigate(["heroes"], {some-data: "othrData"})
потому что некоторые данные не являются допустимым параметром. Как я могу это сделать? Я не хочу отправлять параметр с помощью queryParams.
Ответы
Ответ 1
В этой теме много путаницы, потому что есть так много разных способов сделать это.
Вот соответствующие типы, используемые на следующих снимках экрана:
private route: ActivatedRoute
private router: Router
1) Обязательные параметры маршрутизации:
![enter image description here]()
2) Маршрут Необязательные параметры:
![enter image description here]()
3) Параметры запроса маршрута:
![enter image description here]()
4) Вы можете использовать сервис для передачи данных из одного компонента в другой без использования параметров маршрута вообще.
Для примера см.: https://blogs.msmvps.com/deborahk/build-a-simple-angular-service-to-share-data/
У меня есть плункер этого здесь: https://plnkr.co/edit/KT4JLmpcwGBM2xdZQeI9?p=preview
Ответ 2
В Angular 7.2.0 появился новый метод
https://angular.io/api/router/NavigationExtras#state
Послать:
this.router.navigate(['action-selection'], { state: { example: 'bar' } });
Recieve:
constructor(private router: Router) {
console.log(this.router.getCurrentNavigation().extras.state.example); // should log out 'bar'
}
Вы можете найти дополнительную информацию здесь:
https://github.com/angular/angular/pull/27198
Ссылка выше содержит этот пример, что может быть полезно: https://stackblitz.com/edit/angular-bupuzn
Ответ 3
Вы можете использовать это. Angular2+/4/5 - навигация с данными https://github.com/Hipparch/Angular2-navigate-with-data
Ответ 4
В последней версии angular (7.2+) теперь есть возможность передавать дополнительную информацию с помощью NavigationExtras.
Домашний компонент
import {
Router,
NavigationExtras
} from '@angular/router';
const navigationExtras: NavigationExtras = {
state: {
transd: 'TRANS001',
workQueue: false,
services: 10,
code: '003'
}
};
this.router.navigate(['newComponent'], navigationExtras);
newComponent
test: string;
constructor(private router: Router) {
const navigation = this.router.getCurrentNavigation();
const state = navigation.extras.state as {
transId: string,
workQueue: boolean,
services: number,
code: string
};
this.test = "Transaction Key:" + state.transId + "<br /> Configured:" + state.workQueue + "<br /> Services:" + state.services + "<br /> Code: " + state.code;
}
Выход
![enter image description here]()
Надеюсь, это поможет!
Ответ 5
Лучшее, что я нашел в интернете, это ngx-navigation-with-data. Это очень просто и хорошо для навигации данных от одного компонента к другому компоненту. Вы должны просто импортировать класс компонента и использовать его очень простым способом. Предположим, у вас есть дом и о компоненте, и вы хотите отправить данные тогда
ДОМАШНИЙ КОМПОНЕНТ
import { Component, OnInit } from '@angular/core';
import { NgxNavigationWithDataComponent } from 'ngx-navigation-with-data';
@Component({
selector: 'app-home',
templateUrl: './home.component.html',
styleUrls: ['./home.component.css']
})
export class HomeComponent implements OnInit {
constructor(public navCtrl: NgxNavigationWithDataComponent) { }
ngOnInit() {
}
navigateToABout() {
this.navCtrl.navigate('about', {name:"virendta"});
}
}
О КОМПОНЕНТЕ
import { Component, OnInit } from '@angular/core';
import { NgxNavigationWithDataComponent } from 'ngx-navigation-with-data';
@Component({
selector: 'app-about',
templateUrl: './about.component.html',
styleUrls: ['./about.component.css']
})
export class AboutComponent implements OnInit {
constructor(public navCtrl: NgxNavigationWithDataComponent) {
console.log(this.navCtrl.get('name')); // it will console Virendra
console.log(this.navCtrl.data); // it will console whole data object here
}
ngOnInit() {
}
}
Для любого запроса следуйте https://www.npmjs.com/package/ngx-navigation-with-data
Комментарий за помощь.
Ответ 6
@dev-nish Ваш код работает с небольшими изменениями. сделать
const navigationExtras: NavigationExtras = {
state: {
transd: 'TRANS001',
workQueue: false,
services: 10,
code: '003'
}
};
в
let navigationExtras: NavigationExtras = {
state: {
transd: '',
workQueue: ,
services: ,
code: ''
}
};
затем, если вы хотите специально отправить тип данных, например, JSON, в результате заполнения формы, вы можете отправить данные так же, как описано выше.