Динамическое создание: Динамическое создание компонентов в Angular (Перевод) | by Alexander Bukhtatyy

Содержание

Динамическое создание компонентов в Angular (Перевод) | by Alexander Bukhtatyy

Оригинал: https://netbasal.com/dynamically-creating-components-with-angular-a7346f4a982d

В данной статье, мы изучим как динамический создать компонент в Angular.

Для начала нам нужен компонент.

Для простоты мы собираемся использовтаь простой компонент alert который будет принимать как Input тип алерта.

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

В Angular, такое место называется container.

В my-app компоненте, мы создадим шаблонный элемент. Мы так же пометим его хэш символом (#)для обьявления ссылки под названием alertContainer. template элемнет является тем самым местом, или в мире Angular , container.

Замечание: Контейнером может быть любой DOM-элемент или компонент.

Теперь нам нужно достать ссылку на наш контейнер в my-app компоненте.

Мы можем достать ссылку на контейнер использу ViewChild декоратор который так же принимает локальную переменную в качестве параметра.

По умолчанию значение декоратораViewChild — это экземпляр компонента или DOM-элемент, но в нашем случае нам нужно достать элемент как ViewContainerRef.

Как следует из названия, ViewContainerRef является ссылкой на контейнер. ViewContainerRef хранит ссылку на шаблонный елемент (наш контейнер) и так же предоставляет API для создания компонентов.

You can see the nativeElement

Создадим 2 кнопки которые помогут нам создать alert компонент.

Прежде чем мы вызовем createComponent() метод, нам нужно добавиль еще один сервис.

ComponentFactoryResolver сервис предоставлет один основной метод — resolveComponentFactory.

resolveComponentFactory() метод берет компонент и возвращает ComponentFactory.

Вы можете думать о ComponentFactory как о обьекте который знает как создавать компоненты.

Как вы можете наблюдать ComponentFactory предоставляет create() метод который будет использован внутри контейнера (ViewContainerRef ).

Теперь послендний шаг.

Давайте обьясню что происходит шаг за шагом.

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

Метод resolveComponentFactory() принимает компонент и возвращает фабрику(рецепт) для создания этого компонента.

Мы вызываем createComponent() метод и передаем ему рецепт. Внутри этого метода будет вызван метод create() из фабрики и будет добавлен компонент после нашего контейнера.

Теперь мы имеем ссылку на наш новый компонент, и мы может устрановить через Input свойство типа.

Вы так же можете подписаться на Output компонента как продемонстрированно ниже:

И не забудьте уничтожить компонент:

Последним шагом будет — добавление вашего динамического компонента в entryComponents секцию вашего модуля:

python — динамическое создание окон и присвоение им идентификатора

id = child_window.index(child_window) #тут вываливается ошибка

Функция index ищет в списке объект и если его не будет, выбросит исключение ValueError, а у вас в функцию передается число, хотя в списке объекты дочерних окон. Исключения нужно ловить через try/except. В примере покажу как обрабатывать исключения, что не были пойманы в try/except, через sys.excepthook

Насчет кода, я бы сказал выглядит неплохо. Но названия классов нужно писать с верхнего регистра и в верблюжьей нотации, и думаю лучше не писать в названии class, для примера: MainWindow.

А переменные child_count = 0, child_window = [] я бы перенес в сам класс MainWindow. Да и child_count

не нужно, т.к. количество можно получить из списка child_window

Тут, кст, фигня:

main_window_class().print_close_message()

Вы создаете новое окно и у него вызываете метод print_close_message. Архитектурно, лучше окнам-детям передавать окно родителя и его использовать. В print_close_message добавил параметр для объекта дочернего окна, в него виджет пишет самого себя, так родительское окно узнает что дочернее окно закрывается

Подправил код с учетом замечаний и рекомендаций:

import sys
import traceback
from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton, QLineEdit, QMessageBox
def log_uncaught_exceptions(ex_cls, ex, tb):
    text = '{}: {}:\n'.format(ex_cls.__name__, ex)
    text += ''.join(traceback.format_tb(tb))
    print(text)
    QMessageBox. critical(None, 'Error', text)
    sys.exit(1)
sys.excepthook = log_uncaught_exceptions
class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("Prog_1 Main Window")
        self.setGeometry(100, 100, 500, 500)
        self.btn1 = QPushButton("Создать дочернее окно", self)
        self.btn1.clicked.connect(self.btn1_on_click)
        self.btn1.setGeometry(0, 50, 300, 50)
        self.name_edit = QLineEdit("Ваш ник", self)
        self.name_edit.setGeometry(0, 0, 300, 50)
        self.child_windows = []
    def print_close_message(self, child: 'ChildWindow'):
        self.child_windows.remove(child)
        print(f"кто-то сдох :-(\nнас осталось: {len(self.child_windows)}")
    def btn1_on_click(self):
        child_window = ChildWindow(self)
        child_window.show()
        self.child_windows.append(child_window)
        print(len(self.child_windows))
        print("Нас стало:", len(self.child_windows))
        idx = self.child_windows.
index(child_window) print("Мой id:", idx) class ChildWindow(QMainWindow): def __init__(self, parent: MainWindow): super().__init__() self.parent = parent self.setWindowTitle("Prog_1 ChildWindow") self.setGeometry(100, 100, 500, 500) def closeEvent(self, event): event.accept() self.parent.print_close_message(self) def main(): app = QApplication(sys.argv) main_window = MainWindow() main_window.show() sys.exit(app.exec_()) if __name__ == "__main__": main()

Dynamic Creations Salon & Spa

Dynamic

Компания Dynamic Creations была создана для создания самых креативных причесок для таких людей, как вы. Если вы находитесь в районе Мельбурна или Палм-Бей и ищете Shampoo & Set, UpDo, Press, Dreads, Twist или Weave, Dynamic Creations — это заведение для вас.

Записаться на прием

0019 Rinse 9012 9001 Релаксатор

15

9016 9 1001625 Блокировка$1,257 & up 9001 9012
 
Шампунь и набор $45 и выше
Frontal — Closure Shampoo $65 & up
Shampoo Weave $55 & up
Trim $15 & up
Haircut $20 & up
Up- DO $ 55 и UP
ЦВЕТ
— 1 PROC $ 25 & UP
— 2 Proc $ 45 и повышение
$ 45 и повышение
$ 45 и UP
$15 & up
Highlights
— Full $85 & up
— Partial $45 & up
Crimps $45 & up
Curl / Flat Iron $35 и выше
Wand Curles $45 и выше
Спираль/стержни $65 и выше
— Children $65
— Retouch $75 & up
— Virgin $80 & up
— Wave by Design $75 & up
Protein Treatment от 15 долларов
Кератиновое лечение от 110 долларов
Wave Nouveau от 75 долларов
0011
 
Natural Hair $35 & up
Comb Twist $65 & up
Stuff Twist $85 & up
Cornrows (Feed-in)
Искусственные замки 150 долларов США и более
Искусственные замки/дреды (ретушь) 75 долларов США и более
Box Braids (Children) $100 & up
Box Braids (Adults) $155 & up
Loose Curl Crotchet $125 & up
Pre-Twisted Crotchet $ 85 и UP
Kinky Twist $ 150 и UP
The Deant Twist (Дети) $ 100 и UP
ВВОД ВОЗДЕЛА (ВОЛИТЕЛЬСТИ)0020
$160 & up
Micro Braids $165 & up
Quick Weave $75 & up
Weave per Track $15
Weave (Partial) $135 & up
Плетение с закрытием $ 145 и выше
360 Установка переплетения $ 165 и UP
Кружевая фронтал $ 85 и UP
Quick Weave $95 & up
Weave Removal $25 & up
Wig Install $85 & up
Custom Wig $135 & up
Sew in ( Частичная) $135 и выше
Вшивание (передняя надстройка) $185 и выше
Вшивание (надстройка закрытия) и выше 1452 $0019 Вшивание (дополнение 360 Frontal) $195 и выше

Доставка наших продуктов для волос на дом.

ДИНАМИЧЕСКИЕ ТВОРЕНИЯ ДЛЯ ДОМА

  • 908-444-9143

  • или начните оценку

Ожидайте самого лучшего от дома своей мечты. Мы, конечно, делаем.

ПОМОГИТЕ


ВАШ НАДЕЖНЫЙ СОВЕТНИК. ВАШ АДВОКАТ.
ВАШ СТРОИТЕЛЬ.

Строительство или ремонт дома вашей мечты должно быть волнующим и вдохновляющим моментом в вашей жизни. Когда у вас есть правильная профессиональная команда, это может быть. В Dynamic Home Creations наша цель ясна: поддержать вас как домовладельца и убедиться, что вы получаете максимальную отдачу на каждом этапе строительства.

Мы работаем рука об руку с вами и вашим архитектором, чтобы обеспечить превосходство на каждом этапе пути.

Мы все здесь, чтобы создать идеальный конечный продукт, но и вы можете испытать Dynamic Home Creations. С Sims на вашей стороне вы можете расслабиться и насладиться творческим процессом, пока мы воплощаем вашу мечту в реальность.


Читать далее

Чем мы занимаемся

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

Может быть, вы все еще мечтаете. Может быть, вы уже по локоть в сборке, но вам нужна рука помощи. От консультации до закатывания рукавов, Dynamic Home Creations обладает опытом и навыками, чтобы довести ваш проект до конца, где бы вы ни находились в процессе. Позвольте нам использовать наш тридцатилетний опыт индивидуального строительства роскошных домов для вас.

Полная реконструкция кухни

Полная реконструкция кухни

Стоимость рабочей силы зависит от объема, местоположения и сложности проекта, но стоимость рабочей силы обычно составляет около 25-35% от общей стоимости проекта.

Забронируйте встречу

Полная реконструкция подвала

Полная реконструкция подвала

Оценка затраты на подвальный реконструкция за кв. Фута 500 SF = $ 20K

Книга Antainment

ОДИНГ. преимущества расширенного жилого пространства на открытом воздухе, палуба может фактически увеличить стоимость вашего дома. В среднем вы можете окупить около 70-80% ваших инвестиций в качественную колоду.

Записаться на прием

Стоимость реконструкции кровли

Стоимость реконструкции кровли

Кровля 325 долларов США за квадрат (100 кв. футов) и более высокая цена 500 долларов США за квадрат (100 квадратных футов)

Записаться на прием

Полный ремонт дома

Полная реконструкция ванной комнаты

Стоимость рабочей силы зависит от объема, местоположения и сложности проекта, но стоимость рабочей силы обычно составляет около 25-35% от общей стоимости проекта

Записаться на прием

Реконструкция дверей

Реконструкция дверей

Стоимость рабочей силы зависит от объема, местоположения и сложности проекта, но стоимость рабочей силы обычно составляет около 25-35% от общей стоимости проекта

Записаться на прием

Реконструкция окон

Модернизация Windows

Установка окон стоит всего 225 долларов за окно при обычной новой установке. Более дорогой вариант стоит 500 долларов за полную замену.

Записаться на прием

Служба доставки контейнеров

Услуга Roll Off Containers

500 долларов США 14-ярдовый контейнер, 10-дневное использование, лимит 2 тонны.

Записаться на прием

Переделка дверей патио

Переделка дверей патио

Стоимость рабочей силы зависит от объема, местоположения и сложности проекта, но стоимость рабочей силы обычно составляет около 25-35% от общей стоимости проекта

Записаться на прием

Богатый опыт на вашей стороне

Lorem Ipsum — это просто фиктивный текст полиграфической и наборной промышленности. Lorem Ipsum был стандартным фиктивным текстом в отрасли с 1500-х годов, когда неизвестный печатник взял гранку шрифта и перемешал ее, чтобы сделать книгу образцов шрифтов. Он пережил не только пять столетий, но и скачок в электронный набор текста, оставаясь практически неизменным.

Он был популяризирован в 1960-х годах с выпуском листов Letraset, содержащих отрывки Lorem Ipsum, а совсем недавно — с программным обеспечением для настольных издательских систем, таким как Aldus PageMaker, включая версии Lorem Ipsum.

Узнать больше

Почему вы должны выбрать нас

Цена соответствует цене

Нашли дешевле? Сообщите нам, и мы будем рады вам помочь. ожидания

Своевременная доставка

Быстрый бесшовный процесс планирования, проектирования и строительства без скрытых сюрпризов в конце 5 лет совокупного опыта

Восхищение наших клиентов

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

Отзыв

Мои клиенты говорят

Каждый проект начинается с разговора

Мы превращаем идеи в замечательные пространства, а Dynamic Home Creations не соответствует размеру или бюджету проекта.

Оставить комментарий

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *