Как отследить изменение переменной в компоненте Angular 2+?
Нужно следить за изменением переменной в компоненте и вызывать колбэк. Если в первом Ангуляре это делалось с помощью watch, то во втором не ясно как делать.
Либо вызывать в разных местах (на ngModelChange, на click кнопки и т.д. там где меняется переменная) Либо делать отдельный компонент, запихивать эту переменную ему в параметры и обрабатывать с помощью геттеров и сеттеров Либо сделать проверку в ngDoCheck с использованием differ и т.п. Все не особо удобные. Есть другие способы? http://plnkr.co/edit/2QttX9f2UiuxPL2IEx9X?p=preview |
Shitbox2,
Observable? |
Да, Observable. А как? Придется использовать Reactive Form, что не очень хотелось бы. Если есть собственные компоненты, то их так же придется интергрировать в ангуляровские формы. Как это без Reactive Form сделать?
|
Shitbox2,
Можно просто сказать что переменная - это Subject. Кому надо - подпишутся. А при изменении данных через метод next прокидывать новое значение и все "подписчики" получат уведомдение. Может есть какой-то конкретный пример? |
Конкретный пример только тот, что в ссылке в первом сообщении.
Но, в общем, ситауция весьма распространенная. У нас есть какая-то форма. Мы её можем заполнять как ручками, так и брать информацию из query-параметров адресной строки или из шаблона, например. Т.е. есть несколько способов заполнения. Так же в форме у нас есть некая логика, зависящая от состояния определенных полей. Например, выбираем страну - появляется список городов, выбираем город - появляется список улиц, выбираем улицу и ставим какую-то галочку - появляются ещё поля. Заполняем всё это - отправляем форму. Тут, конечно, напрашивается реактивный подход и, соответственно, использование реактивных ангуляровских форм, но это уже попахивает переусложнением. В этом случае повесить на переменную обсервер видится наиболее предпочтительным вариантом. UI будет синхронизироваться с состоянием автоматически, но в то же время мы сможем прозрачно работать с переменными и аякс-запросами как с потоками и пилить на них логику. Как просто сказать, что переменная это Subject? |
Shitbox2,
Не понимаю какое переусложнение будет, если взять за основы реактивные формы. Я бы так и сделал. Цитата:
const variable = new BehaviorSubject(initialValue); |
И как это поможет? ngModel не понимает таких переменных
<input [(ngModel)]="variable"> Переусложнение, потому что и по коду больше писанины и более глубокое понимание Англуляра требуется и динамические формы не так очевидно делаются. В общем, написать-то можно но потом с поддержкой замучаешься. P.S. Тут только что-то подобное может подойти makeObservable(this.value).subscribe(...) Но поддерживает ли Angular/rx такое из коробки? |
|
Ну, тут тоже переменная никак не обозревается. Всё на геттерах и сеттерах построено
|
Shitbox2,
Цитата:
|
Часовой пояс GMT +3, время: 19:56. |