Angular 在服务文件中调用函数时从两个组件获取数据
我无法将数据从两个组件传递到共享服务中的Angular 在服务文件中调用函数时从两个组件获取数据,angular,Angular,我无法将数据从两个组件传递到共享服务中的onSubmit()函数 当我访问http://localhost:4200/r/g6g6g6myReferralComponent获取g6g6g6并将其设置为myUserService中的codeSentIn,然后将其定向到myUserComponent。然后,当有人在myUserComponent中提交表单时,它会将表单数据发送到UserService,但是,问题是这个过程会清除codeSentIn值,因为它会重新初始化服务文件(我认为)。如何将cod
onSubmit()
函数
当我访问http://localhost:4200/r/g6g6g6
myReferralComponent
获取g6g6g6
并将其设置为myUserService
中的codeSentIn
,然后将其定向到myUserComponent
。然后,当有人在myUserComponent
中提交表单时,它会将表单数据发送到UserService
,但是,问题是这个过程会清除codeSentIn
值,因为它会重新初始化服务文件(我认为)。如何将codeSentIn
和表单数据同时放入我的userService
文件中,以便我可以在postaser()中提交这两部分内容
myuserService中的函数
下面是我访问http://localhost:4200/r/g6g6g6
然后继续提交表格
referral component loaded
g6g6g6
this should hopefully be correct?-> g6g6g6
User Component Appears!
[WDS] Live Reloading enabled.
The referral code sent to user service -> undefined
user.component.ts
import { Component, OnInit } from '@angular/core';
import { NgForm } from '@angular/forms';
import { User } from '../shared/user.model';
import { UserService } from '../shared/user.service';
@Component({
selector: 'app-user',
templateUrl: './user.component.html',
styleUrls: [
'./user.component.css'
],
providers: [UserService]
})
export class UserComponent implements OnInit {
constructor(private userService: UserService) {}
ngOnInit() {
console.log('User Component Appears!');
}
onSubmit(form: NgForm) {
this.userService.postUser(form.value).subscribe(res => {
});
}
}
import { Component, OnInit } from '@angular/core';
import { ActivatedRoute, Router } from '@angular/router';
import { UserService } from '../shared/user.service';
@Component({
selector: 'app-referral',
templateUrl: './referral.component.html',
styleUrls: ['./referral.component.css'],
providers: [UserService]
})
export class ReferralComponent implements OnInit {
constructor(
private route: ActivatedRoute,
private router: Router,
private userService: UserService
) {}
ngOnInit() {
this.codeProcessor();
}
codeProcessor() {
console.log('referral component loaded');
const code = this.route.snapshot.paramMap.get('code');
console.log(code);
this.userService.codeSentIn = code;
console.log(
'this should hopefully be correct?-> ' + this.userService.codeSentIn
);
this.router.navigate(['']);
}
}
import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/operator/map';
import 'rxjs/operator/toPromise';
import { User } from './user.model';
import { UserComponent } from '../user/user.component';
@Injectable({
providedIn: 'root'
})
export class UserService {
selectedUser: User;
users: User[];
readonly baseURL = 'http://localhost:3000/users';
codeSentIn;
constructor(private http: HttpClient) {}
postUser(users: User) {
console.log('The referral code sent to user service -> ' + this.codeSentIn);
return this.http.post(this.baseURL, users);
}
getUserList() {
return this.http.get(this.baseURL);
}
}
reference.component.ts
import { Component, OnInit } from '@angular/core';
import { NgForm } from '@angular/forms';
import { User } from '../shared/user.model';
import { UserService } from '../shared/user.service';
@Component({
selector: 'app-user',
templateUrl: './user.component.html',
styleUrls: [
'./user.component.css'
],
providers: [UserService]
})
export class UserComponent implements OnInit {
constructor(private userService: UserService) {}
ngOnInit() {
console.log('User Component Appears!');
}
onSubmit(form: NgForm) {
this.userService.postUser(form.value).subscribe(res => {
});
}
}
import { Component, OnInit } from '@angular/core';
import { ActivatedRoute, Router } from '@angular/router';
import { UserService } from '../shared/user.service';
@Component({
selector: 'app-referral',
templateUrl: './referral.component.html',
styleUrls: ['./referral.component.css'],
providers: [UserService]
})
export class ReferralComponent implements OnInit {
constructor(
private route: ActivatedRoute,
private router: Router,
private userService: UserService
) {}
ngOnInit() {
this.codeProcessor();
}
codeProcessor() {
console.log('referral component loaded');
const code = this.route.snapshot.paramMap.get('code');
console.log(code);
this.userService.codeSentIn = code;
console.log(
'this should hopefully be correct?-> ' + this.userService.codeSentIn
);
this.router.navigate(['']);
}
}
import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/operator/map';
import 'rxjs/operator/toPromise';
import { User } from './user.model';
import { UserComponent } from '../user/user.component';
@Injectable({
providedIn: 'root'
})
export class UserService {
selectedUser: User;
users: User[];
readonly baseURL = 'http://localhost:3000/users';
codeSentIn;
constructor(private http: HttpClient) {}
postUser(users: User) {
console.log('The referral code sent to user service -> ' + this.codeSentIn);
return this.http.post(this.baseURL, users);
}
getUserList() {
return this.http.get(this.baseURL);
}
}
user.service.ts
import { Component, OnInit } from '@angular/core';
import { NgForm } from '@angular/forms';
import { User } from '../shared/user.model';
import { UserService } from '../shared/user.service';
@Component({
selector: 'app-user',
templateUrl: './user.component.html',
styleUrls: [
'./user.component.css'
],
providers: [UserService]
})
export class UserComponent implements OnInit {
constructor(private userService: UserService) {}
ngOnInit() {
console.log('User Component Appears!');
}
onSubmit(form: NgForm) {
this.userService.postUser(form.value).subscribe(res => {
});
}
}
import { Component, OnInit } from '@angular/core';
import { ActivatedRoute, Router } from '@angular/router';
import { UserService } from '../shared/user.service';
@Component({
selector: 'app-referral',
templateUrl: './referral.component.html',
styleUrls: ['./referral.component.css'],
providers: [UserService]
})
export class ReferralComponent implements OnInit {
constructor(
private route: ActivatedRoute,
private router: Router,
private userService: UserService
) {}
ngOnInit() {
this.codeProcessor();
}
codeProcessor() {
console.log('referral component loaded');
const code = this.route.snapshot.paramMap.get('code');
console.log(code);
this.userService.codeSentIn = code;
console.log(
'this should hopefully be correct?-> ' + this.userService.codeSentIn
);
this.router.navigate(['']);
}
}
import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/operator/map';
import 'rxjs/operator/toPromise';
import { User } from './user.model';
import { UserComponent } from '../user/user.component';
@Injectable({
providedIn: 'root'
})
export class UserService {
selectedUser: User;
users: User[];
readonly baseURL = 'http://localhost:3000/users';
codeSentIn;
constructor(private http: HttpClient) {}
postUser(users: User) {
console.log('The referral code sent to user service -> ' + this.codeSentIn);
return this.http.post(this.baseURL, users);
}
getUserList() {
return this.http.get(this.baseURL);
}
}
路线
const routes: Routes = [
{
path: 'r/:code',
component: ReferralComponent
},
{
path: '',
redirectTo: 'home',
pathMatch: 'full'
},
{
path: '',
component: UserComponent
}
];
删除提供程序:[UserService]
。这告诉Angular:专门为我的组件创建一个UserService实例,不要使用其他组件使用的实例。所以你建议创建第二个服务?可能是转诊.service.ts
?我不希望这样做,因为我想让他们共享一个服务,这样他们就可以一起提交数据不,一点也不。我不知道你是怎么从我说的话中推断出来的。我说:删除提供者:[UserService]
。我解释了为什么需要这样做:因为在一个组件上有提供者:[UserService]
:为我的组件专门创建一个UserService实例,不要使用其他组件使用的实例。啊,从这两个组件。行了,谢谢!首先,为什么要添加提供者:[UserService]
,为什么这是标准?根本不是标准。我不知道你从哪里弄来的。当您需要一个新的服务实例专门用于您的组件时,您可以这样做,这几乎是不可能的,尤其是当一个服务被providedIn修饰为“root”时,它的意思正好相反:应该在根模块级别提供该服务的一个实例,因此,它可以在任何地方注入,并在所有组件之间共享。