
@Component1.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, selector22.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 形式渲染поддерживаемым браузером.