Почему Ionic Sometines нужен тайм-аут для работы с компонентами - PullRequest
0 голосов
/ 11 октября 2018

Мне часто нужно добавить setTimeout, чтобы команда работала правильно с Ionic.

Моя конфигурация:

Ionic:

   ionic (Ionic CLI)  : 4.0.1 (/Users/rguerin/.nvm/versions/node/v6.10.1/lib/node_modules/ionic)
   Ionic Framework    : ionic-angular 3.1.1
   @ionic/app-scripts : 1.3.7

System:

   NodeJS : v6.10.1 (/Users/rguerin/.nvm/versions/node/v6.10.1/bin/node)
   npm    : 3.10.10
   OS     : macOS High Sierra

Мой шаблон:

<ion-list [formGroup]="formGroup">

    <ion-item *ngIf="countries">

        <ion-label floating>
            {{ 'customer.country' | translate }}
            <span class="required" ion-text color="red">*</span>
        </ion-label>

        <ion-select formControlName="Country">
            <ion-option *ngFor="let c of countries" [value]="c.In">{{c.Out}}</ion-option>
        </ion-select>

    </ion-item>

Например, если я попытаюсь установить значение элемента управления формы, как это, оно не будет работать должным образом без setTimeout:

private setFormControlValue(propertyName: string, value: string, stockEmpty?: boolean): void {

    let formControl: AbstractControl = this.formGroup.controls[propertyName];
    if (_.isEmpty(value) && !stockEmpty) {
        return;
    } else {
        if (!_.isEmpty(formControl) && !_.isNil(formControl)) {
            this.logger.trace('Setting value %s for control : ', value, formControl);
            setTimeout(() => formControl.setValue(value), 100);
        }
    }
}

Также происходит, когда я хочу изменить размер моего контента:

ngOnInit(): void {

    setTimeout(() => this.content.resize(), 100);
}

Иногда даже работает с таймаутом 0 мс.Я бы не хотел использовать таймаут везде, но у меня сложилось впечатление, что Ионику нужно, чтобы инструкция выполнялась в другом «потоке», чтобы она выполнялась правильно.

Если кто-то сталкивается с той же проблемой или знает лучшеОбходной путь, я бы с радостью взял его.

Ответы [ 2 ]

0 голосов
/ 11 октября 2018

По моему опыту, setTimeout иногда делал бы хитрости в отношении операций DOM и функций DeviceReady.Я чувствую, что это в основном из-за Angular digest-loop производительности.

Вот немного старое post stackoverflow, и это правильнохорошо написано.

Спасибо за чтение моего плохого ответа.

0 голосов
/ 11 октября 2018

Вы пробовали:

this.formGroup.get('Country').setValue('toto');

Работает у меня мгновенно

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