Expressionchangedafterithasbeencheckederror при условной установке атрибута элемента

Я условно добавляю атрибуты заголовка к таким элементам:

<div #optionEl class="option-title" [attr.title]="isTitleTruncated(optionEl) ? option.title : null">
    {{option.title}}
</div>

который вызывает:

isTitleTruncated(e) {
    return (e.offsetWidth < e.scrollWidth);
}

Для случаев, когда название действительно применяется, получение:

Error: ExpressionChangedAfterItHasBeenCheckedError: Expression has changed after it was checked. Previous value: 'title: null'. Current value: 'title: A very long piece of text'

Я не уверен, почему это происходит, может ли кто-нибудь указать, почему или каковы могут быть возможные причины?

Вы можете узнать больше о различных причинах, вызывающих одну и ту же проблему, кликните сюда

RajeshKdev 31.10.2018 13:48
1
1
161
1

Ответы 1

Эта ошибка также возникает, когда значение атрибута изменяется более одного раза перед отрисовкой / привязкой начального значения / операции к атрибуту представления.

Например:

Допустим, у вас есть флаговая переменная isTitleTruncated, а начальное значение - false, при загрузке просмотра она попытается присвоить значение. при выполнении этой работы по назначению привязки, если значение флага снова переназначается для true or false, то это приводит к ExpressionChangedAfterItHasBeenCheckedError.

Потому что, что здесь делает angular:

Angular runs change detection until the model stabilizes, it might run forever. If Angular doesn't run change detection, then the view might not reflect the current state of the model.

Хорошо, спасибо, я все еще не понимаю, как решить проблему, хотя

mindparse 31.10.2018 15:01

Вы должны проверить, где значение переменной переназначается, и обновлять только один раз при рендеринге просмотра.

RajeshKdev 31.10.2018 15:04

Другие вопросы по теме