@Component
1.1 Назначение декоратора @Component
При объявлении компонента декоратор @Component должен использоваться в классе компонента, чтобы сообщить Angular, что это компонент. [Рекомендация по соответствующему руководству: «Угловое руководство»]
import { Component, OnInit } from '@angular/core'; @Компонент({ селектор: 'app-product-alerts', templateUrl: './product-alerts.comComponent.html', styleUrls: ['./product-alerts.comComponent.css'] }) класс экспорта ProductAlertsComponent реализует OnInit { конструктор() { } ngOnInit() { } }
1.2 Общие параметры декоратора @Component
Декоратор @Component
наследует от Directive
Этот CSS-селектор используется для обозначения директивы в шаблоне и запуска ее создания.
1.2.1继承自@Directive装饰器的选项
Описание | селектора | . | |
---|---|---|---|
Строка. | Имя селектораCSS | , используемое для обозначения директивы (компонента) в шаблоне и запуска | |
ее | создания | . | Атрибут inputs определяет набор элементов конфигурации, указывающих от DirectiveProperty до BidingProperty: · DirectiveProperty используется для указания свойства внутри директивы, в которое должно быть записано значение. ·bindingProperty используется для указания свойства DOM, из которого должно быть считано значение. Если привязкаProperty не указана, предполагается, что она такая же, как и DirectiveProperty. |
outputs | string[] | Набор выходных свойств для привязки событий. Когда выходное свойство генерирует событие, вызывается обработчик в шаблоне, прикрепленном к событию. Каждое выходное свойство сопоставляет DirectiveProperty с BidingProperty: · DirectiveProperty определяет свойство компонента, вызывающее событие. ·bindingProperty определяет атрибут HTML, к которому должен быть прикреплен обработчик событий. | |
предоставляет | Provider[] | Коллекция поставщиков услуг. | |
ExportAs | string | Одно или несколько имен, которые можно использовать для назначения этой директивы переменной в шаблоне. Если имен несколько, разделяйте их запятыми. | |
query | {[key:string]:any} | настраивает некоторые запросы, которые будут вставлены в эту директиву. Запрос содержимого задается перед вызовом обратного вызова ngAfterContentInit. Запрос на представление будет установлен перед вызовом обратного вызова ngAfterViewInit. | |
jit | true | Если true, инструкция/компонент будет игнорироваться компилятором AOT, поэтому он всегда будет компилироваться JIT. Эта опция предназначена для поддержки будущих компиляторов Ivy и пока не имеет эффекта. | |
хост | {[key:string]:string} | использует набор пар ключ-значение для сопоставления свойств класса с привязками элементов хоста (свойства, атрибуты и события). Angular автоматически проверяет привязки свойств хоста во время обнаружения изменений. Если связанное значение изменяется, Angular обновляет хост-элемент директивы. Если ключ является свойством главного элемента, значение свойства будет распространено на указанный атрибут DOM. Если ключ является статическим атрибутом в DOM, значение атрибута будет распространено на свойство, указанное в основном элементе. Для обработки событий: · Его ключом является событие DOM, которое инструкция хочет прослушать. Чтобы прослушать глобальное событие, добавьте цель, которую вы хотите прослушивать, перед именем события. Целью может быть окно, документ или тело. · Его значением является оператор, который будет выполнен при возникновении события. Если этот оператор вернет false, будет вызвана функция PreventDefault этого события DOM. В этом операторе можно ссылаться на локальную переменную $event для получения данных о событии. |
1.2.2 @Component自己特有的选项
Описание | типа | параметра | |
---|---|---|---|
ChangeDetection | ChangeDetectionStrategy | При создании экземпляра компонента Angular создаст детектор изменений, который отвечает за распространение изменений в каждом значении привязки компонента. Политика имеет одну из следующих ценностей: · ChangeDetectionStrategy#OnPush(0) устанавливает стратегию CheckOnce (по требованию). · ChangeDetectionStrategy#Default(1) устанавливает стратегию CheckAlways. | |
viewProviders | Provider[] | определяет набор внедряемых объектов, доступных в каждом дочернем узле представления. | |
Строка | ModuleId | содержит идентификатор модуля, содержащего компонент. Компонент должен иметь возможность разрешать относительные URL-адреса, используемые в шаблонах и таблицах стилей. SystemJS экспортирует переменную __moduleName в каждый модуль. В CommonJS для этого параметра можно установить значение Module.id. | |
templateUrl | string | URL-адрес файла шаблона компонента. Если он предусмотрен, не используйте шаблон для предоставления встроенных шаблонов. | |
Встроенный шаблон | компонентастроки | шаблона | .Если он предоставлен, не используйте templateUrl для предоставления шаблона. |
styleUrls | string[] | Один или несколько URL-адресов, указывающих на файл, содержащий таблицу стилей CSS этого компонента. | |
style | string[] | Один или несколько встроенных стилей CSS, используемых этим компонентом. | |
анимации | Any[] | Один или несколько вызовов анимационных триггеров(), содержащих некоторые определения состояний() и перехода(). | |
инкапсуляция | ViewEncapsulation | — это стратегия инкапсуляции стилей, используемая шаблонами и стилями CSS. Значения следующие: · ViewEncapsulation.ShadowDom: используйте Shadow DOM. Он работает только на платформах, которые изначально поддерживают Shadow DOM. · ViewEncapsulation.Emulated: используйте CSS-оболочки для эмуляции собственного поведения. · ViewEncapsulation.None: используйте глобальный CSS без какой-либо инкапсуляции. Если не указано, значение получается из CompilerOptions. Параметр компилятора по умолчанию — ViewEncapsulation.Emulated. Если для политики установлено значение ViewEncapsulation.Emulated, а компонент не указывает стили или styleUrls, он автоматически переключится на ViewEncapsulation.None. | |
interpolation | [строка, строка] | переопределяет начальный и конечный разделители по умолчанию для выражений интерполяции ({ { и }}) | |
enterComponents | Array<Type | Any[]> | |
saveWhitespaces | boolean | Если true, он сохраняется, если false, возможные лишние пробельные символы удаляются из скомпилированного шаблона. Пробельные символы — это символы, которые соответствуют s в регулярных выражениях JavaScript. По умолчанию значение false, если оно не переопределено с помощью параметров компилятора. |
selector
может использовать одну из следующих форм:
element-name
: выберите[attribute]
на основе имени элемента: выберите.class
на основе имени атрибута: выберите [атрибут=значение] на основе имени классаnot(sub_selector)
: выберите selector1, selector2 только тогда, когда элемент не соответствует подселектору. sub_selectorselector1, selector2
2.1 выбирается независимо от того, соответствует ли selector1 или selector2 element-name
: select
@Component({ селектор: 'app-element', шаблон: './element.comComponent.html', styleUrls: ['./element.comComponent.css'] })
<app-element></app-element>
2.2 [attribute]
: выберите
@Component({ селектор: '[app-element]', шаблон: './element.comComponent.html', styleUrls: ['./element.comComponent.css'] })
<div app-element></div>
2.3 .class
: выберите
@Component({ селектор: '.app-element', шаблон: './element.comComponent.html', styleUrls: ['./element.comComponent.css'] })
<div class="app-element"></div>
host
: {[key:string]:string}
использует набор пар ключ-значение для сопоставления свойств класса с привязкой хоста элемент (Свойство, Атрибуты и события).
Angular автоматически проверяет привязки свойств хоста во время обнаружения изменений. Если связанное значение изменяется, Angular обновляет хост-элемент директивы.
для обработки событий:
3.1 attribute
и property
Сходства и различия:
双向
dom 的property
, поэтому инструкция привязана к свойству, но в некоторых случаях dom не существует. Такое свойство, как colspan, rowspan и т. д. Если вы хотите связать свойства html-тега, вам нужно использовать attr
:
<table. width="100%" border="10px сплошной"> <тр> <th>Месяц</th> <th>Экономия</th> </tr> <тр> <td [attr.colspan]=colnum>Январь</td> </tr> <тр> <td [attr.colspan]=colnum>Февраль</td> </tr> </таблица> let colnum:number = 2;
3.2 Используйте host
для привязки class
@Component({ селектор: '.app-element', шаблон: './element.comComponent.html', styleUrls: ['./element.comComponent.css'], хозяин: { '[class.default-class]': 'useDefault' }, encapsulation: ViewEncapsulation.None // Пусть основной элемент также использует стиль element.comComponent.css. В противном случае по умолчанию используются капсулы, чтобы избежать загрязнения CSS. }) класс экспорта AppElementComponent { @Input() useDefault = true; }
<div class="app-element"></div>
3.3 Использовать style
привязки host
@Component({ селектор: '.app-element', шаблон: './element.comComponent.html', styleUrls: ['./element.comComponent.css'], хозяин: { '[style.background]': 'inputBackground' } }) класс экспорта AppElementComponent { @Input() inputBackground = 'красный'; }
<div class="app-element"></div>
3.4. Использование host
для привязки событий
@Component({ селектор: '.app-element', шаблон: './element.comComponent.html', styleUrls: ['./element.comComponent.css'], хозяин: { '(клик)': 'onClick($event)' } }) класс экспорта AppElementComponent { общественный onClick ($ событие) { console.log($событие); } }
<div class="app-element"></div>
encapsulation
(инкапсуляция)Стратегия инкапсуляции стилей для шаблонов и стилей CSS.
4.1 Веб-компоненты
инкапсулируют компонент стандартизированным и ненавязчивым способом. Каждый компонент может организовать свою собственную структуру HTML, стиль CSS и код JavaScript, не不会干扰
другим элементам на странице.
Веб-компоненты состоят из следующих четырех технологий:
4.2 Теневой DOM
<!DOCTYPE html> <html> <голова> <мета-кодировка="UTF-8"> <title>Теневой DOM</title> <style type="text/css"> .shadowroot_son { цвет: #f00; } </стиль> </голова> <тело> <p>Я не в Shadow Host</p> <div>Привет, мир!</div> <скрипт> // теневой хост varshadowHost = document.querySelector('.shadowhost'); // Создаем теневой корень (теневой корень) варshadowRoot =shadowHost.createShadowRoot(); // Теневой корень — это первый узел теневого дерева, а другие узлы, такие как узел p, — его дочерние узлы. shadowRoot.innerHTML = '<p>Я нахожусь в теневом хосте</p>'; </скрипт> </тело> <html>
4.3 ViewEncapsulation
ViewEncapsulation позволяет установить три дополнительных значения:
4.3.1 ViewEncapsulation.None
import { Component, ViewEncapsulation } из '@angular/core'; @Компонент({ селектор: «мое приложение», шаблон: ` <h4>Добро пожаловать в мир Angular</h4> <p class="greet">Привет, {{name}</p> `, стили: [` .приветствовать { фон: #369; цвет: белый; } `], инкапсуляция: ViewEncapsulation.None // Нет Эмулируемый ShadowDom | }) класс экспорта AppComponent { имя: строка = 'Семлинкер'; }
Результатом установки ViewEncapsulation.None
является отсутствие Shadow DOM
и все стили применяются ко整个
document
. Другими словами, на стиль компонента будет受外界影响
и он может быть覆盖
.
4.3.2 ViewEncapsulation.Emulated
import { Component, ViewEncapsulation } from '@angular/core'; @Компонент({ селектор: «мое приложение», ..., инкапсуляция: ViewEncapsulation.Emulated // Нет Эмуляции | }) класс экспорта AppComponent { имя: строка = 'Семлинкер'; }
Результатом настройки ViewEncapsulation.Emulated
является отсутствие Shadow DOM
, но компонент инкапсулируется с помощью样式包装机制
предоставляемого Angular
, так что на стиль компонента不受外部影响
. Хотя стиль по-прежнему применяется ко整个document
, Angular создает селектор [_ngcontent-cmy-0]
для класса .greet
. Видно, что为组件定义的样式,被Angular 修改了
. Среди них _nghost-cmy- 和_ngcontent-cmy-
используются для实现局部的样式
.
4.3.3 ViewEncapsulation.ShadowDom
import { Component, ViewEncapsulation } from '@angular/core'; @Компонент({ селектор: «мое приложение», ..., инкапсуляция: ViewEncapsulation.ShadowDom // Нет Эмулируемый ShadowDom | }) класс экспорта AppComponent { имя: строка = 'Семлинкер'; }
Результатом настройки ViewEncapsulation.ShadowDom
является использование встроенной функции Shadow DOM
. Angular будет Shadow DOM 形式渲染
поддерживаемым браузером.