Необходимо дать время для внесения изменений в компонент в DOM.
Один из способов сделать это - использовать window.setTimeout()
для выполнения change_margin()
в следующем цикле JavaScript.
toggle_menu_text() {
this.menu_bar_status = !this.menu_bar_status;
window.setTimeout(()=>this.change_margin());
}
Вышеуказанное задержит вызов функции, но теперь обнаружение изменений не будет работать. Поэтому мы должны запустить обратный вызов внутри Angular, используя зону. Вы можете использовать зону, вставив NgZone
в конструктор вашего компонента и вызвав метод run()
.
toggle_menu_text() {
this.menu_bar_status = !this.menu_bar_status;
window.setTimeout(()=> this.zone.run(()=>this.change_margin()));
}
ОБНОВЛЕНО:
Как указано в комментарии. Я не верю, что вам нужно использовать зоны с setTimeout()
.
Возможно, смотрите на примеры приложений, которые обойдены через в более поздних главах. Вы будете видеть, что классы и объекты являются просто другим инструментом в Вашем поле. Сопротивляйтесь желанию программировать Java с синтаксисом Lisp.
Другим местом для взгляда на является Успешный Lisp, главы 7 и 14 для основ, и главы 31 и часть 3,10 о пакетах и обрабатывающий крупные проекты.
Некоторый гуру Lisp (это, возможно, был Paul Graham, но я не уверен) когда-то сказал, что у него есть не нужный CLOS вообще все же.
править: Я думаю, что Ваш беспорядок может прибыть из того, что в Lisp, Вы не используете систему классов для организации пространств имен. Это сделано отдельно; эти два действительно не имеют никакого отношения друг к другу.
Если Вы действительно хотите понять CLOS, можно возвратиться и прочитать Искусство Протокола Метаобъекта, который обеспечивает основание и базовый код для Closette, версии подмножества CLOS.
Мы в Weblocks также используем CLOS в большой степени, таким образом, Вы могли бы хотеть просмотреть источник немного.
Если требуется овладеть книгой, "Объектно-ориентированное программирование В ЯЗЫКЕ COMMON LISP" Sonja E. Keene, Глава 11 (Разрабатывающий Усовершенствованную Программу CLOS: Потоки), содержит нетривиальный пример с охватом множественного наследования приблизительно 40 страниц.
Восемь классов обсуждены подробно (поток, входной поток, поток вывода, двунаправленный поток, символьный поток, поток байтов, дисковый поток и поток на ленте). Реальные классы, из которых пользователь, как ожидали бы, создаст экземпляры, затем получены с помощью множественного наследования.
Это более существенно, чем пример банковского счета в Практическом языке Common LISP. Вы могли бы также найти остальную часть книги Keene полезной в получении более глубокого понимания CLOS: целая книга о CLOS.
Большими приложениями CLOS является 1) CAPI из Lispworks 2), веб-сервер 3 статьи-http), очень большой пакет CLOS является CLIM 4), если Вам нравится OpenGenera (это - ОС Lisp с помощью языка Common LISP и некоторого предшественника ZetaLisp 5), меньшим пакетом является http://www.cliki.net/mel-base
Отношения Friedrich