Angular 2 RC4
응용 프로그램은 TypeScript 1.9
작성 변수 RxJS 5 beta 6
RxJS 내 읽을 수
내가 가입 할 때 내 클래스 변수가 관찰 생성 함수에 전달되지 않는 이유 이해하기 정말 힘든 시간을 보내고있어 왜 일명 5 관찰 가능한 변수 범위 . 내 코드는 다음과 같습니다하지만 새로운 값을 방출 할 때 입력 = 뭔가
start()
- 신청하기를 호출하여 구독을 시작할 때 당신은 (는 at this Plunker 실행을 참조하십시오
app/app.component.ts
//this is the problematic var. Can't pass its updated value to the Observable input = 'nothing'; //<- default value ngOnInit(){//<- this runs right after class constructor //set to the value we want to send to the server this.input = 'something'; } start(){ //to make sure input = something when we subscribe this.print("Subscribing when input = "+this.input); this.source.subscribe(d=>this.print(d)); } //Simulate sending input to the server source = this.queryServer(this.input) .do(()=>this.print('Emitting new value...')); //server just returns what it received queryServer(input){return Observable.from(['Server sees '+input])} print(value){this.log.push(value);} log=[];
출력을 볼 수 있습니다. ..
- 서버에서 아무 것도 볼 수 없음
우리는 구독을 호출 할 때 클래스 속성이 something
인데 어떻게 되니 queryserver()
에 nothing
이 전달됩니까? 나는 과 같은 객체를 input={d:'something'}
과 같은 객체로 만들려고했는데, 아마도 문제는 참조 대신 값을 전달하는 것과 관련이 있지만 결과는 같았을 것이라고 생각했습니다.
"input = something"설정 후 관찰 가능 체인을 구성하면 새로운 값이 사용된다는 것은 맞습니다. 자주 변경되는 모델 변수가 있고 업데이트 된 값을 서버에 보내야 할 때마다 모든 변경 사항에서 관찰 가능 항목을 다시 작성해야하기 때문에 이는 실제로 제한적으로 보입니다. 예를 들어 여기에있는 예제에서'input'은'ngOnInit'이 완료된 후에도 계속 변경 될 것입니다. 그래서 다음에'queryServer'를 호출해야 할 때'source'를 다시 작성해야합니까?Rx 팀이'subscribe()'를 호출 할 때까지 아무 일도하지 않는다는 것을 알려주기 때문에이 모든 것이 놀랍습니다. – BeetleJuice
그런데 데모 코드를 사용하면'input'이 실제로 객체인지 문자열 대신에'copyOfInput'과'input'은 똑같은 것을 참조 할 것입니까? 그래서 내가 객체를 사용하면 일을 기대하지만, OP에서 기술 한 동작은 그 경우에도 유지됩니다 (예 : 변수를 선언 할 때'input = {d : 'nothing'} '을 설정하면 'input.d = 'something'in'ngOnInit()') – BeetleJuice
구독하기 전까지는 아무 일도하지 않고, 가입 할 때 하나의 이벤트 만 내보내는 파이프 라인을 만들고 있습니다. 당신이 상태를 직접 변이시킬 때. 그리고 Observable에 실제로 전달한 값인 새 문자열을 만들기 위해이 값을 사용하기 때문에 객체와도 작동하지 않습니다. 제안 된 솔루션으로 업데이트하겠습니다. – paulpdaniels