角度4中两个同胞组件之间的变量共享?
问题描述:
我有2个兄弟组件,我想访问另一个组件中要访问的一个组件的变量。我使用共享服务,但它不起作用。你能告诉我我的错在哪?角度4中两个同胞组件之间的变量共享?
服务:
@Injectable()
export class SharedService{
private isSuccess = new Subject<boolean>();
getSaveBtnStatus(){
return this.isSuccess.asObservable();
}
setSaveBtnStatus(value: boolean){
this.isSuccess.next(value);
}
}
组件1:
@Injectable()
export class LoginComponent implements OnInit {
constructor(private http: Http, private route: ActivatedRoute, private router: Router, private myshared: SharedService) {
}
ngOnInit() {
}
login = (user) => {
var username = user.username;
var password = user.password;
var user_api , user_birth ;
var url = 'https://swapi.co/api/people/?search='+username;
this.http.get(url).subscribe(data => {
var count = data.json().count;
if(count == 0)alert("NO such user");
if(count > 0) {
user_api= (data.json().results[0].name);
user_birth = (data).json().results[0].birth_year;
if(password == user_birth && username == user_api) {
console.log("Successful");
this.myshared.setSaveBtnStatus(true);// using shared service
this.router.navigate(['/search']);
} else if (password != user_birth || username != user_api)
alert("CHECK Your Username and Passowrd");
}
})
}
}
子项目2:
export class SearchPlanetComponent implements OnInit {
form;
private loading: boolean = false;
private results: Observable<Array<String>>;
public searchField : FormControl
private isSuccess :Boolean
constructor(private myservice: SearchService,
private myshared:SharedService, private http: Http) {
}
ngOnInit() {
this.myshared.getSaveBtnStatus().
subscribe(
data => console.log(data) // nothing is printed in console.
);
}
请告诉为什么服务功能的get/set不工作?
答
它不起作用,因为当您在主体内发出值时,底层组件假设要侦听的值未加载。调用router.navigate
后,该组件正在加载。
您应该考虑使用BehaviorSubject
而不是Subject
,因为BehaviourSubject
坚持最后发出的值。当有人订阅它时,它也会发出持久的值。
//it needs initial state while registering it, so passed false
private isSuccess = new BehaviorSubject<boolean>(false);
请问您可以创建一个plunker吗? – Rama