Почему Angular не замечает, что массив изменился, но если я сначала изменю его на NULL?
У меня есть компонент AngularJS, который принимает массив через в одну сторону двух-способ (=
) привязки данных.У родителя у меня есть кнопка, чей щелчок по нг соответствует этой функции:
onClickAddValue()
{
this.listOfValues.push(this.valueInput);
}
, где this.listOfValues
- это то, что передается дочернему компоненту через привязку.Этот код не имеет никакого эффекта (представление дочернего компонента не обновляется).Будучи умным cookie, который заранее сделал домашнее задание по AngularJS, я знаю, что это потому, что значение listOfValues
не изменилось, это все та же ссылка на объект.Поэтому я делаю это:
onClickAddValue()
{
var oldList = this.listOfValues;
this.listOfValues = [];
for (let value of oldList)
{
this.listOfValues.push(value);
}
this.listOfValues.push(this.valueInput);
}
Но это тоже не работает!Я также пытался Object.assign
и angular.copy
.Как будто мой дочерний компонент просто не замечает никаких изменений в его входных данных вообще.И все же ясно, что это так, потому что код ниже работает !
onClickAddValue()
{
var oldList = this.listOfValues;
this.listOfValues = null;
setTimeout(
() =>
{
this.listOfValues = oldList;
this.listOfValues.push(this.valueInput);
this.$scope.$digest();
}
);
}
Что происходит?Я могу понять, почему последний фрагмент работает - listOfValues
имеет значение NULL, ng-click
автоматически запускает дайджест, и Angular замечает новое значение NULL, поэтому он обновляет представление, а затем мгновенное изменение listOfValues
снова изменяется,другой дайджест запускается вручную, и представление обновляется снова.Но тогда почему другая версия не работает?Почему изменение объекта отличается от изменения его на ноль, а затем его изменение?