Ich versuche, Daten von Formular an Dienst, aber ohne Erfolg übergeben. Ich habe es geschafft, ein funktionierendes Routing-System zwischen Hauptseite und Login-Seite zu implementieren. Ich möchte den Benutzernamen und das Passwort von LoginComponent an VehicleService weitergeben und den derzeit angemeldeten Benutzer anzeigen. Ich habe versucht:Angular2 Übergeben Sie Datenwerte auf Route
- Erstellen Sie LoginService, um Daten an VehicleService zu übergeben.
Hier ist der Code:
Router
import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
import { VehicleComponent } from './vehicle.component';
import { LoginComponent } from './login.component';
const routes: Routes = [
{ path: '', redirectTo: '/vehicle', pathMatch: 'full' },
{ path: 'vehicle', component: VehicleComponent },
{ path: 'login', component: LoginComponent }
];
@NgModule({
imports: [RouterModule.forRoot(routes)],
exports: [RouterModule]
})
export class AppRoutingModule { }
VehicleService
import { Injectable } from '@angular/core';
import { Http } from '@angular/http';
import { Md5 } from 'ts-md5/dist/md5';
import { User } from './user';
import 'rxjs/add/operator/map';
@Injectable()
export class VehicleService {
private defUrl = 'dummywebiste.com';
constructor(private http: Http) { }
getVehicle(username?: string, password?: string) {
const url = (!username || !password) ? this.defUrl : 'dummywebiste.com' + username + '/' + Md5.hashStr(password);
return this.http.get(url)
.map(res => res.json());
}
}
Vereinfachte VehicleComponent
@Component({
selector: 'vehicle-json',
templateUrl: './vehicle.html',
providers: [VehicleService]
})
export class VehicleComponent {
public vehicles: GeneralVehicle[];
constructor(private vehicleService: VehicleService, private router: Router) {
this.vehicleService.getVehicle().subscribe(vehicle => {
this.vehicles = vehicle;
});
}
toLogin(): void {
console.log("toLogin button");
this.router.navigate(['/login']);
}
}
Simplified LoginComponent
@Component({
selector: 'login',
templateUrl: './login.html',
providers: [VehicleService]
})
export class LoginComponent implements OnInit {
public user: FormGroup;
ngOnInit() {
this.user = new FormGroup({
username: new FormControl('', Validators.required),
password: new FormControl('', Validators.required)
});
}
constructor(public vehicleService: VehicleService, private location: Location, private router: Router) { }
onSubmit(user) {
this.vehicleService
.getVehicle(user.value.username, user.value.password)
.subscribe(user => {
this.user = user;
//this.user.reset();
this.router.navigate(['/vehicle']);
console.log("Submit button");
});
}
goBack(): void {
console.log("Back button");
this.location.back();
}
}
onSubmit()
von LoginComponent
keine Daten übergeben, wenn ich die Daten eintragen. Als ich eine Komponente ohne Routing-System verwendet habe, war es in Ordnung.
Danke.
Was meinst du, die OnSubmit-Methode wird nicht ausgelöst, oder Sie sind nicht in der Lage, die Werte aus dem Formular zu extrahieren? – Alex
..oder erwarten Sie nach der Anmeldung und Navigation zu Fahrzeugen, dass die Benutzerinformationen folgen würden?Sie abonnieren den Wert in LoginComponent, also sind die Werte vorhanden, aber wenn Sie von dieser Komponente weg navigieren, verlieren Sie den Benutzer. Wenn Sie es so speichern möchten, dass es in der App verfügbar ist, müssen Sie den lokalen Speicher oder Dienst verwenden, um die Benutzerwerte zu speichern. – Alex