IT이야기

관찰 가능 변경사항이 보기에 반영되지 않음

cyworld 2022. 3. 11. 22:21
반응형

관찰 가능 변경사항이 보기에 반영되지 않음

나는 기본적으로 관찰 가능한 데이터 서비스를 구현하기 위해 이 가이드를 따랐다.

스토어 클래스에서 (ItemsStore) 나는 내 것을 가지고 있다.BehaviorSubject그 품목들의 리스트가 들어 있는

items:BehaviorSubject<List<Item>> = new BehaviorSubject(List([]));

구성 요소는 다음과 같이 템플릿의 저장소를 사용한다.

<ion-slide *ngFor="let item of itemStore.items | async" >
  [...]
</ion-slide>

이제 이것은 앱이 로드될 때 잘 작동한다 - 내 모든 항목이 표시된다.단, 만약 내가 아이템을 에 추가한다면BehaviorSubject스토어 클래스에서 다음 코드 사용:

this.items.next(this.item.getValue().push(newItem));

이것은 그 견해에 반영되지 않았다.나는 변화 처리가 자동으로 각도2에 의해 이루어진다는 인상을 받았지만, 그런 것 같지는 않다.

이러한 변경 사항이 보기에 반영되도록 어떻게 감지하고 처리할 수 있는가?

네가 말하는 방식이 문제인 것 같아 의심스럽다.

this.items.next(this.item.getValue().push(newItem));

뭔지 모른다.this.item.getValue()만약을 제외하고 반환하다.push()방법은 새로운 길이를 반환하는 것과 같다(중요한 것은 다시 돌아오지 않는 것이다).this.items새 품목이 추가됨.

async파이프는 다음과 같이 정의된다.

비동기 파이프는 관찰 가능 또는 약속에 가입하여 비동기 파이프가 내보낸 최신 값을 반환한다.

그래서 당신이 전화할 때this.items.next(...)비동기 파이프는 새 길이만 수신하고 와 반복하려고 시도한다.*ngFor.

만약this.item쥔다<List<Item>>다음 주소로 전화하십시오.

this.item.getValue().push(newItem);
this.items.next(this.item);

Btw, 그 방법은 당신이 함께 일하고 있다는 사실을 숨기는 데 사용된다.Subject. 제목이 전화하자.next()또는complete()다른 사용자들이 망치는 것을 원하지 않는 것이다.이런 이유로 그냥 아무데나 지나가는 것이 좋다.Observable보관하다Subject필요한 곳에 혼자만 있을 뿐이지

항목 속성은 관찰 가능해야 하지만, 이를 동작 하위 제목 유형으로 설정하십시오.링크에는 다음과 같은 항목이 있다.

@Injectable()
export class TodoStore {
    private _todos: BehaviorSubject<List<Todo>> = new BehaviorSubject(List([]));

    public todos: Observable<List<Todo>> = this._todos.asObservable();

    constructor(private todoBackendService: TodoBackendService) {
        this.loadInitialData();
    }
    ...
}

따라서 이 튜토리얼을 따른다고 가정하면 다음과 같은 작업을 수행해야 한다.

private _items: BehaviorSubject<List<Item>> = new BehaviorSubject(List([]));
public items: Observable<List<Item>> = this._items.asObservable();

그것을 해결했다 - 그리고 그것은 매우 어리석은 실수였다 - 나는 수치심을 느꼈다. ItemsStore두 개의 다른 클래스에 주입되며, 의존성 주입은 각 주입에 대한 인스턴스를 생성하기 때문에, 우리는 한 개만 있어야 하는 동일한 종류의 두 개를 갖게 된다.

종속성 이동(ItemsStore)을(를) 글로벌 제공업체 어레이에 전달하여 문제를 해결했다.

참조URL: https://stackoverflow.com/questions/39703167/changes-in-observable-not-reflected-in-view

반응형