Как сделать объединениеПоследний оператор в подписках valueChanges - PullRequest
0 голосов
/ 04 сентября 2018
showDateCriteria = combineLatest(this.myForm.controls['name'].valueChanges, this.myForm.controls['age'].valueChanges, (name, age) => ({name, age}))
.subscribe(val => !(val.name==null ||val.age==null ));

Я пробовал этот код с combLatest Operator и showDateCriteria

<div *ngIf="{{showDateCriteria | async}}">Show This</div>

Я не могу показать <div> событие, хотя определенное условие выполнено

https://stackblitz.com/edit/angular-rs3d7a

1 Ответ

0 голосов
/ 04 сентября 2018

Как говорит ошибка ERROR Error: InvalidPipeArgument: '[object Object]' for pipe 'AsyncPipe'.

Вы пытаетесь синхронизировать подписку, что не имеет смысла.

Вы должны передавать потоки.

this.showDateCriteria =
    combineLatest(
        this.myForm.controls['name'].valueChanges,
        this.myForm.controls['age'].valueChanges, (name, age) => ({
            name,
            age
        }));
this.showDateCriteria.subscribe(val => !(val.name == null || val.age == null));

РЕДАКТИРОВАТЬ:

Вы также должны startWith, иначе combineLatest не сработает. Кроме того, логика была неправильной, вы должны вернуть boolean true, когда любой из них не равен нулю, например:

this.showDateCriteria = combineLatest(
    this.myForm.controls['name'].valueChanges.pipe(startWith(null)),
    this.myForm.controls['age'].valueChanges.pipe(startWith(null)),
    (name, age) => {
        console.log(name);
        return name || age;
    });

https://stackblitz.com/edit/angular-g6vi6k?file=src%2Fapp%2Fapp.component.ts

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...