1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678 |
- <!DOCTYPE HTML>
- <html lang="" >
- <head>
- <meta charset="UTF-8">
- <meta content="text/html; charset=utf-8" http-equiv="Content-Type">
- <title>directives_源码解析 · 代码收集</title>
- <meta http-equiv="X-UA-Compatible" content="IE=edge" />
- <meta name="description" content="">
- <meta name="generator" content="GitBook 3.1.1">
-
-
-
-
- <link rel="stylesheet" href="../../../gitbook/style.css">
-
-
-
- <link rel="stylesheet" href="../../../gitbook/gitbook-plugin-search-pro/search.css">
-
-
-
- <link rel="stylesheet" href="../../../gitbook/gitbook-plugin-highlight/website.css">
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- <meta name="HandheldFriendly" content="true"/>
- <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
- <meta name="apple-mobile-web-app-capable" content="yes">
- <meta name="apple-mobile-web-app-status-bar-style" content="black">
- <link rel="apple-touch-icon-precomposed" sizes="152x152" href="../../../gitbook/images/apple-touch-icon-precomposed-152.png">
- <link rel="shortcut icon" href="../../../gitbook/images/favicon.ico" type="image/x-icon">
-
- <link rel="next" href="03_ng_model.html" />
-
-
- <link rel="prev" href="01_formControl.html" />
-
- </head>
- <body>
-
- <div class="gb-page-wrapper">
- <header class="gb-page-header">
- <div class="container">
-
-
- <div id="book-search-input" role="search">
- <input type="text" placeholder="Type to search" />
- </div>
- <a href="../../.." class="logo">
- <img src="../../../gitbook/images/logo/128.png">
- <h1>代码收集</h1>
- </a>
-
-
- <a href="https://github.com/seamong/myBlogs/blob/master/doc/angular/study_notes/from/02_directives.md" target="_blank" class="btn btn-link pull-right hidden-xs">
- <i class="octicon octicon-mark-github"></i> 在GitHub编辑本页
- </a>
- <a href="../../../faq.md" class="btn btn-link pull-right hidden-xs">
- F.A.Q
- </a>
- <a href="https://github.com/seamong/myBlogs/README.md" target="_blank" class="btn btn-link pull-right hidden-xs">
- 当前版本0.0.1
- </a>
-
- </div>
- </header>
- <div class="gb-page-body">
- <div class="gb-page-inner">
- <div class="container">
- <div class="row">
- <div class="col-md-3">
-
-
- <div class="panel panel-default">
-
- <div class="panel-heading">
- <h3 class="panel-title">介绍</h3>
- </div>
-
- <div class="list-group">
-
-
-
- <a href="../../../" class="list-group-item ">
-
-
-
- 关于本文档
-
- </a>
-
-
-
- </div>
- </div>
-
- <div class="panel panel-default">
-
- <div class="panel-heading">
- <h3 class="panel-title">JavaScript</h3>
- </div>
-
- <div class="list-group">
-
-
-
- <a href="../../../JavaScript/principle/" class="list-group-item ">
-
-
-
- <i class="octicon octicon-chevron-right"></i>
-
- 原理解析
-
- </a>
-
-
-
-
- <a href="../../../JavaScript/cases/" class="list-group-item ">
-
-
-
- <i class="octicon octicon-chevron-right"></i>
-
- 案例解析
-
- </a>
-
-
-
- </div>
- </div>
-
- <div class="panel panel-default">
-
- <div class="panel-heading">
- <h3 class="panel-title">angular</h3>
- </div>
-
- <div class="list-group">
-
-
-
- <a href="../" class="list-group-item ">
-
-
-
- <i class="octicon octicon-chevron-down"></i>
-
- Study notes
-
- </a>
-
-
-
-
-
- <a href="../0_depend.html" class="list-group-item ">
-
-
- <i class="octicon octicon-chevron-down" style="opacity: 0"></i>
-
-
- 项目依赖
-
- </a>
-
-
-
-
- <a href="../01_built-in_instructions.html" class="list-group-item ">
-
-
- <i class="octicon octicon-chevron-down" style="opacity: 0"></i>
-
-
- 内置指令
-
- </a>
-
-
-
-
- <a href="./" class="list-group-item ">
-
-
- <i class="octicon octicon-chevron-down" style="opacity: 0"></i>
-
-
- <i class="octicon octicon-chevron-down"></i>
-
- 表单
-
- </a>
-
-
-
-
-
- <a href="0_template_case.html" class="list-group-item ">
-
-
- <i class="octicon octicon-chevron-down" style="opacity: 0"></i>
-
- <i class="octicon octicon-chevron-down" style="opacity: 0"></i>
-
-
- 模板案例
-
- </a>
-
-
-
-
- <a href="01_formControl.html" class="list-group-item ">
-
-
- <i class="octicon octicon-chevron-down" style="opacity: 0"></i>
-
- <i class="octicon octicon-chevron-down" style="opacity: 0"></i>
-
-
- formControl
-
- </a>
-
-
-
-
- <a href="02_directives.html" class="list-group-item active">
-
-
- <i class="octicon octicon-chevron-down" style="opacity: 0"></i>
-
- <i class="octicon octicon-chevron-down" style="opacity: 0"></i>
-
-
- directives_源码解析
-
- </a>
-
-
-
-
- <a href="03_ng_model.html" class="list-group-item ">
-
-
- <i class="octicon octicon-chevron-down" style="opacity: 0"></i>
-
- <i class="octicon octicon-chevron-down" style="opacity: 0"></i>
-
-
- ngModel
-
- </a>
-
-
-
-
- <a href="04_Form-Validation_&_Custom-Validator.html" class="list-group-item ">
-
-
- <i class="octicon octicon-chevron-down" style="opacity: 0"></i>
-
- <i class="octicon octicon-chevron-down" style="opacity: 0"></i>
-
-
- 表单验证&自定义验证器
-
- </a>
-
-
-
-
- <a href="05_Listen_to_form_data_changes.html" class="list-group-item ">
-
-
- <i class="octicon octicon-chevron-down" style="opacity: 0"></i>
-
- <i class="octicon octicon-chevron-down" style="opacity: 0"></i>
-
-
- 监听表单数据变化
-
- </a>
-
-
-
-
- <a href="06_Problem_collection.html" class="list-group-item ">
-
-
- <i class="octicon octicon-chevron-down" style="opacity: 0"></i>
-
- <i class="octicon octicon-chevron-down" style="opacity: 0"></i>
-
-
- 问题收集
-
- </a>
-
-
-
-
-
-
-
-
- <a href="../../ng.html" class="list-group-item ">
-
-
-
- ng
-
- </a>
-
-
-
- </div>
- </div>
-
- <div class="panel panel-default">
-
- <div class="panel-heading">
- <h3 class="panel-title">css</h3>
- </div>
-
- <div class="list-group">
-
-
-
- <a href="../../../css/principle/" class="list-group-item ">
-
-
-
- 原理解析
-
- </a>
-
-
-
-
- <a href="../../../css/cases/" class="list-group-item ">
-
-
-
- <i class="octicon octicon-chevron-right"></i>
-
- 案例收集
-
- </a>
-
-
-
- </div>
- </div>
-
- <div class="panel panel-default">
-
- <div class="panel-heading">
- <h3 class="panel-title">vue</h3>
- </div>
-
- <div class="list-group">
-
-
-
- <a href="../../../vue/components/" class="list-group-item ">
-
-
-
- <i class="octicon octicon-chevron-right"></i>
-
- components
-
- </a>
-
-
-
-
- <a href="../../../vue/router/" class="list-group-item ">
-
-
-
- <i class="octicon octicon-chevron-right"></i>
-
- router
-
- </a>
-
-
-
-
- <a href="../../../vue/vuex/" class="list-group-item ">
-
-
-
- VUE
-
- </a>
-
-
-
- </div>
- </div>
-
- <div class="panel panel-default">
-
- <div class="panel-heading">
- <h3 class="panel-title">ubuntu</h3>
- </div>
-
- <div class="list-group">
-
-
-
- <a href="../../../ubuntu/serves/" class="list-group-item ">
-
-
-
- <i class="octicon octicon-chevron-right"></i>
-
- 服务器生存指南
-
- </a>
-
-
-
-
- <a href="../../../ubuntu/instruction.html" class="list-group-item ">
-
-
-
- 常用指令
-
- </a>
-
-
-
- </div>
- </div>
-
- <div class="panel panel-default">
-
- <div class="panel-heading">
- <h3 class="panel-title">GIT</h3>
- </div>
-
- <div class="list-group">
-
-
-
- <a href="../../../git/git.html" class="list-group-item ">
-
-
-
- git 命令
-
- </a>
-
-
-
- </div>
- </div>
-
- <div class="panel panel-default">
-
- <div class="list-group">
-
-
-
- <a href="../../../other/faq.html" class="list-group-item ">
-
-
-
- FAQ
-
- </a>
-
-
-
-
- <a href="../../../other/examples.html" class="list-group-item ">
-
-
-
- Examples
-
- </a>
-
-
-
- </div>
- </div>
-
- </div>
- <div class="col-md-9">
-
- <div id="book-search-results">
- <div class="search-noresults">
-
-
- <div class="gb-markdown book-page-inner">
- <pre><code class="lang-typescript"><span class="hljs-comment">/**
- * @license
- * Copyright Google Inc. All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */</span>
- <span class="hljs-keyword">import</span> { ChangeDetectionStrategy } from <span class="hljs-string">'../change_detection/constants'</span>;
- <span class="hljs-keyword">import</span> { Provider } from <span class="hljs-string">'../di'</span>;
- <span class="hljs-keyword">import</span> { Type } from <span class="hljs-string">'../type'</span>;
- <span class="hljs-keyword">import</span> { TypeDecorator } from <span class="hljs-string">'../util/decorators'</span>;
- <span class="hljs-keyword">import</span> { ViewEncapsulation } from <span class="hljs-string">'./view'</span>;
- <span class="hljs-comment">/**
- * 指令装饰器/构造函数的类型。
- *
- * @stable
- */</span>
- <span class="hljs-keyword">export</span> <span class="hljs-keyword">interface</span> DirectiveDecorator {
- <span class="hljs-comment">/**
- * @它能做什么 将类标记为Angular指令,并收集指令配置
- * 元数据.
- *
- * @如何使用
- *
- * `.``
- * import {Directive} from '@angular/core';
- *
- * @Directive({
- * selector: 'my-directive',
- * })
- * export class MyDirective {
- * }
- * `.``
- *
- * @描述
- *
- * 指令装饰器允许您将类标记为Angular指令,并提供其他元数据,
- * 以确定如何在运行时处理,实例化和使用伪指令。
- *
- * 指令允许您将行为附加到DOM中的元素
- *
- * 一个指令必须属于一个NgModule,
- * 以便它被另一个指令,组件或应用程序使用。
- * 要指定一个指令是NgModule的成员,
- * 您应该将其列在该NgModule的“声明”字段中。
- *
- * 除了通过指令装饰器指定的元数据配置之外,
- * 指令可以通过实现各种生命周期钩子来控制其运行时行为.
- *
- * **元数据属性:**
- *
- * * **exportAs** - 组件实例在模板中导出的名称
- * * **host** - 类属性映射到事件,属性和属性的主机元素绑定
- * * **inputs** - 将类属性名称列表作为组件输入的数据绑定
- * * **outputs** - 列出其他可以订阅的输出事件的类属性名称
- * * **providers** - 该组件及其子组件可用的提供程序列表
- * * **queries** - 配置可以注入组件的查询
- * * **selector** - css选择器,用于标识模板中的此组件
- *
- * @稳定
- * @注解
- */</span>
- (obj: Directive): TypeDecorator;
- <span class="hljs-comment">/**
- * 请参阅{@link指令}装饰器。
- */</span>
- <span class="hljs-keyword">new</span> (obj: Directive): Directive;
- }
- <span class="hljs-keyword">export</span> <span class="hljs-keyword">interface</span> Directive {
- <span class="hljs-comment">/**
- * 触发实例化指令的CSS选择器。
- *
- * Angular仅允许指令触发不跨越元素边界的CSS选择器。
- *
- * `selector` 可以被声明为以下之一:
- *
- * - `element-name`: 按元素名称选择.
- * - `.class`: 按类名选择.
- * - `[attribute]`: 按属性名称选择.
- * - `[attribute=value]`: 按属性名称和值选择.
- * - `:not(sub_selector)`: 只有当元素不匹配`sub_selector`时才选择.
- * - `selector1, selector2`: 选择“selector1”或“selector2”是否匹配.
- *
- *
- * ### 例
- *
- * 假设我们有一个`input [type = text]选择器的指令。
- *
- * 和以下HTML:
- *
- * `.``html
- * <form>
- * <input type="text">
- * <input type="radio">
- * <form>
- * `.``
- *
- * 该指令只能在`<input type =“text”>“元素上实例化.
- *
- */</span>
- selector?: <span class="hljs-built_in">string</span>;
- <span class="hljs-comment">/**
- * 枚举一个指令的数据绑定输入属性集
- *
- * Angular在更改检测期间自动更新输入属性.
- *
- * `inputs`属性将一组`directiveProperty`定义为`bindingProperty`
- 组态:
- *
- * - `directiveProperty`指定写入值的组件属性.
- * - `bindingProperty`指定读取值的DOM属性.
- *
- * 当没有提供`bindingProperty`时,它被假定为等于`directiveProperty`.
- *
- * ### 示例([live demo](http://plnkr.co/edit/ivhfXY?p=preview))
- *
- * 以下示例创建具有两个数据绑定属性的组件.
- *
- * `.``typescript
- * @Component({
- * selector: 'bank-account',
- * inputs: ['bankName', 'id: account-id'],
- * template: `
- * Bank Name: {{bankName}}
- * Account Id: {{id}}
- * `
- * })
- * class BankAccount {
- * bankName: string;
- * id: string;
- *
- * // 此属性未绑定,不会被Angular自动更新
- * normalizedBankName: string;
- * }
- *
- * @Component({
- * selector: 'app',
- * template: `
- * <bank-account bank-name="RBC" account-id="4747"></bank-account>
- * `
- * })
- * class App {}
- * `.``
- *
- */</span>
- inputs?: <span class="hljs-built_in">string</span>[];
- <span class="hljs-comment">/**
- * 枚举一组事件绑定的输出属性。
- *
- * 当输出属性发出一个事件时,附加到该事件的事件处理程序调用该模板。
- *
- * `outputs`属性将一组`directiveProperty`定义为`bindingProperty`配置:
- *
- * - `directiveProperty`指定发出事件的组件属性.
- * - `bindingProperty`指定事件处理程序所附加的DOM属性.
- *
- * ### 示例([live demo](http://plnkr.co/edit/d5CNq7?p=preview))
- *
- * `.``typescript
- * @Directive({
- * selector: 'interval-dir',
- * outputs: ['everySecond', 'five5Secs: everyFiveSeconds']
- * })
- * class IntervalDir {
- * everySecond = new EventEmitter();
- * five5Secs = new EventEmitter();
- *
- * constructor() {
- * setInterval(() => this.everySecond.emit("event"), 1000);
- * setInterval(() => this.five5Secs.emit("event"), 5000);
- * }
- * }
- *
- * @Component({
- * selector: 'app',
- * template: `
- * <interval-dir (everySecond)="everySecond()" (everyFiveSeconds)="everyFiveSeconds()">
- * </interval-dir>
- * `
- * })
- * class App {
- * everySecond() { console.log('second'); }
- * everyFiveSeconds() { console.log('five seconds'); }
- * }
- * `.``
- *
- */</span>
- outputs?: <span class="hljs-built_in">string</span>[];
- <span class="hljs-comment">/**
- * 指定与主机元素相关的事件,操作,属性和属性.
- *
- * ## 主机监听器
- *
- * 通过一组`(event)`指向`method`来指定一个指令侦听哪个DOM事件
- * 键值对:
- *
- * - `event`: 指令监听的DOM事件.
- * - `statement`: 发生事件时执行的语句.
- * 如果该语句的评估返回`false`,那么`preventDefault`应用于DOM事件
- *
- * 要侦听全局事件,必须将事件名称添加到目标.
- * 目标可以是“window”,“document”或“body”.
- *
- * 编写指令事件绑定时,还可以参考$ event局部变量.
- *
- * ### 示例([live demo](http://plnkr.co/edit/DlA5KU?p=preview))
- *
- * 以下示例声明将点击监听器附加到按钮并计数点击的指令.
- *
- * `.``typescript
- * @Directive({
- * selector: 'button[counting]',
- * host: {
- * '(click)': 'onClick($event.target)'
- * }
- * })
- * class CountClicks {
- * numberOfClicks = 0;
- *
- * onClick(btn) {
- * console.log("button", btn, "number of clicks:", this.numberOfClicks++);
- * }
- * }
- *
- * @Component({
- * selector: 'app',
- * template: `<button counting>Increment</button>`
- * })
- * class App {}
- * `.``
- *
- * ## 主机属性绑定
- *
- * 指定指令更新的DOM属性。
- *
- * 在更改检测期间,Angular会自动检查主机属性绑定.
- * 如果绑定更改,它将更新指令的主机元素.
- *
- * ### 示例([live demo](http://plnkr.co/edit/gNg0ED?p=preview))
- *
- * 以下示例创建了一个在DOM元素上设置“valid”和“invalid”类的指令,
- * 该元素具有ngModel伪指令.
- *
- * `.``typescript
- * @Directive({
- * selector: '[ngModel]',
- * host: {
- * '[class.valid]': 'valid',
- * '[class.invalid]': 'invalid'
- * }
- * })
- * class NgModelStatus {
- * constructor(public control:NgModel) {}
- * get valid { return this.control.valid; }
- * get invalid { return this.control.invalid; }
- * }
- *
- * @Component({
- * selector: 'app',
- * template: `<input [(ngModel)]="prop">`
- * })
- * class App {
- * prop;
- * }
- * `.``
- *
- * ## 属性
- *
- * 指定应传播到主机元素的静态属性.
- *
- * ### 例
- *
- * 在这个例子中,
- * 使用主机元素(这里:`<div>`)上的`my-button`指令
- * (例如:`<div my-button> </ div>`)将确保该元素将获得“按钮 “角色。.
- *
- * `.``typescript
- * @Directive({
- * selector: '[my-button]',
- * host: {
- * 'role': 'button'
- * }
- * })
- * class MyButton {
- * }
- * `.``
- */</span>
- host?: {
- [key: <span class="hljs-built_in">string</span>]: <span class="hljs-built_in">string</span>;
- };
- <span class="hljs-comment">/**
- * 定义指令和其轻型DOM子项可见的可注射对象集合.
- *
- * ## 简例
- *
- * 这是一个可以注入的类的例子:
- *
- * `.``
- * class Greeter {
- * greet(name:string) {
- * return 'Hello ' + name + '!';
- * }
- * }
- *
- * @Directive({
- * selector: 'greet',
- * providers: [
- * Greeter
- * ]
- * })
- * class HelloWorld {
- * greeter:Greeter;
- *
- * constructor(greeter:Greeter) {
- * this.greeter = greeter;
- * }
- * }
- * `.``
- */</span>
- providers?: Provider[];
- <span class="hljs-comment">/**
- * 定义可以在模板中使用的名称,以将此指令分配给变量.
- *
- * ## 简例
- *
- * `.``
- * @Directive({
- * selector: 'child-dir',
- * exportAs: 'child'
- * })
- * class ChildDir {
- * }
- *
- * @Component({
- * selector: 'main',
- * template: `<child-dir #c="child"></child-dir>`
- * })
- * class MainComponent {
- * }
- *
- * `.``
- */</span>
- exportAs?: <span class="hljs-built_in">string</span>;
- <span class="hljs-comment">/**
- * 配置将注入到指令中的查询.
- *
- * 内容查询在调用`ngAfterContentInit`回调之前设置.
- * 查询查询是在调用`ngAfterViewInit`回调之前设置的.
- *
- * ### 例
- *
- * `.``
- * @Component({
- * selector: 'someDir',
- * queries: {
- * contentChildren: new ContentChildren(ChildDirective),
- * viewChildren: new ViewChildren(ChildDirective)
- * },
- * template: '<child-directive></child-directive>'
- * })
- * class SomeDir {
- * contentChildren: QueryList<ChildDirective>,
- * viewChildren: QueryList<ChildDirective>
- *
- * ngAfterContentInit() {
- * // 内容节点设置
- * }
- *
- * ngAfterViewInit() {
- * // 设图节点设在
- * }
- * }
- * `.``
- */</span>
- queries?: {
- [key: <span class="hljs-built_in">string</span>]: <span class="hljs-built_in">any</span>;
- };
- }
- <span class="hljs-comment">/**
- * 指令装饰器和元数据.
- *
- * @稳定
- * @注解
- */</span>
- <span class="hljs-keyword">export</span> <span class="hljs-keyword">declare</span> <span class="hljs-keyword">const</span> Directive: DirectiveDecorator;
- <span class="hljs-comment">/**
- * Component装饰器/构造函数的类型.
- *
- * @stable
- */</span>
- <span class="hljs-keyword">export</span> <span class="hljs-keyword">interface</span> ComponentDecorator {
- <span class="hljs-comment">/**
- * @whatItDoes将类标记为角度组件并收集组件配置元数据.
- *
- * @如何使用
- *
- * {@example core/ts/metadata/metadata.ts region='component'}
- *
- * @描述
- * 组件装饰器允许您将类标记为角度组件,
- * 并提供其他元数据,以确定如何在运行时处理,
- * 实例化和使用组件.
- *
- * 组件是Angular应用程序中UI最基本的构建块.
- * Angular应用是一个角度的组件树.
- * Angular组件是指令的一个子集。
- * 与指令不同,组件始终具有模板,
- * 并且只能在模板中的元素中实例化一个组件.
- *
- * 组件必须属于NgModule,
- * 以便它可以被另一个组件或应用程序使用。
- * 要指定组件是NgModule的成员,
- * 应将其列在该NgModule的“声明”字段中。
- *
- * 除了通过Component装饰器指定的元数据配置之外,
- * 组件可以通过实现各种生命周期钩子来控制其运行时行为.
- *
- * **元数据属性:**
- *
- * * **animations** - 该组件的动画列表
- * * **changeDetection** - 改变该组件使用的检测策略
- * * **encapsulation** - 该组件使用的样式封装策略
- * * **entryComponents** - 动态插入到此组件的视图中的组件列表
- * * **exportAs** - 组件实例在模板中导出的名称
- * * **host** - 类属性映射到事件,属性和属性的主机元素绑定
- * * **inputs** - 将类属性名称列表作为组件输入的数据绑定
- * * **interpolation** - 此组件模板中使用的自定义插值标记
- * * **moduleId** - 定义此组件的文件的ES / CommonJS模块ID
- * * **outputs** - 列出其他可以订阅的输出事件的类属性名称
- * * **providers** - 该组件及其子组件可用的提供程序列表
- * * **queries** - 配置可以注入组件的查询
- * * **selector** - css选择器,用于标识模板中的此组件
- * * **styleUrls** - 要应用于此组件视图的样式表的URL列表
- * * **styles** - 内联定义的样式应用于此组件的视图
- * * **template** - 视图的内联定义模板
- * * **templateUrl** - url到包含视图模板的外部文件
- * * **viewProviders** - 此组件及其查看子项可用的提供程序列表
- *
- * ### 例
- *
- * {@example core/ts/metadata/metadata.ts region='component'}
- *
- * @stable
- * @Annotation
- */</span>
- (obj: Component): TypeDecorator;
- <span class="hljs-comment">/**
- * 请参阅{@link Component}装饰器。
- */</span>
- <span class="hljs-keyword">new</span> (obj: Component): Component;
- }
- <span class="hljs-comment">/**
- * 组件元数据的类型.
- *
- * @stable
- */</span>
- <span class="hljs-keyword">export</span> <span class="hljs-keyword">interface</span> Component <span class="hljs-keyword">extends</span> Directive {
- <span class="hljs-comment">/**
- * 定义使用的变更检测策略.
- *
- * 当一个组件被实例化时,Angular创建一个变化检测器,
- * 它负责传播组件的绑定.
- *
- * `changeDetection`属性定义,
- * 是否会每次检查更改检测,或仅当组件告诉它进行检查时.
- */</span>
- changeDetection?: ChangeDetectionStrategy;
- <span class="hljs-comment">/**
- * 定义可视对象的集合,使其DOM DOM子项的视图可见.
- *
- * ## Simple Example
- *
- * 这是一个可以注入的类的例子:
- *
- * `.``
- * class Greeter {
- * greet(name:string) {
- * return 'Hello ' + name + '!';
- * }
- * }
- *
- * @Directive({
- * selector: 'needs-greeter'
- * })
- * class NeedsGreeter {
- * greeter:Greeter;
- *
- * constructor(greeter:Greeter) {
- * this.greeter = greeter;
- * }
- * }
- *
- * @Component({
- * selector: 'greet',
- * viewProviders: [
- * Greeter
- * ],
- * template: `<needs-greeter></needs-greeter>`
- * })
- * class HelloWorld {
- * }
- *
- * `.``
- */</span>
- viewProviders?: Provider[];
- <span class="hljs-comment">/**
- * 包含组件的模块的模块ID.
- * 需要能够解析模板和样式的相对URL.
- * 在CommonJS中,这可以始终设置为`module.id`,同样的SystemJS在每个模块中都会显示`__moduleName`变量.
- *
- *
- * ## 简例
- *
- * `.``
- * @Directive({
- * selector: 'someDir',
- * moduleId: module.id
- * })
- * class SomeDir {
- * }
- *
- * `.``
- */</span>
- moduleId?: <span class="hljs-built_in">string</span>;
- <span class="hljs-comment">/**
- * 指定Angular组件的模板URL.
- *
- *每个View只能定义“templateUrl”或“template”之一.
- */</span>
- templateUrl?: <span class="hljs-built_in">string</span>;
- <span class="hljs-comment">/**
- * 指定Angular组件的内联模板.
- *
- * 每个组件只能定义“templateUrl”或“template”之一.
- */</span>
- template?: <span class="hljs-built_in">string</span>;
- <span class="hljs-comment">/**
- * 指定Angular组件的样式表URL.
- */</span>
- styleUrls?: <span class="hljs-built_in">string</span>[];
- <span class="hljs-comment">/**
- * 指定Angular组件的内联样式表.
- */</span>
- styles?: <span class="hljs-built_in">string</span>[];
- <span class="hljs-comment">/**
- * 通过类似动画的DSL在组件上定义动画。
- * 描述动画的这种DSL方法允许灵活性,
- * 这既有益于开发人员和框架.
- *
- * 通过侦听在模板中的元素上发生的状态更改来进行动画处理。
- * 当发生状态变化时,角度可以利用它们之间的弧线并使其动画化。
- * 这与CSS过渡的工作方式类似,但是通过使用编程式DSL,动画不限于DOM特定的环境.
- * (Angular还可以在幕后进行优化,使动画更加出色.)
- *
- * 为了使动画可以使用,动画状态更改位于{@link触发器动画触发器}中,
- * 它们位于“动画”注释元数据的内部。
- * 在触发器中,可以放置{@link状态}和{@link转换转换}条目.
- *
- * `.``typescript
- * @Component({
- * selector: 'animation-cmp',
- * templateUrl: 'animation-cmp.html',
- * animations: [
- * // 这是我们的动画触发器,它将包含我们的状态变化动画.
- * trigger('myTriggerName', [
- * // 动画完成后,为元素定义的“on”和“off”状态的样式将保留在元素上.
- * state('on', style({ opacity: 1 }),
- * state('off', style({ opacity: 0 }),
- *
- * // 这是我们的动画,当这个状态变化跳跃是真的时,它开始了
- * transition('on => off', [
- * animate("1s")
- * ])
- * ])
- * ]
- * })
- * `.``
- *
- * 如上面的代码所示,
- * 一组相关的动画状态都包含在动画“触发器”(上面的代码示例称为触发器iggerName)中)。
- * 当触发器被创建时,它可以被绑定到组件模板中的一个元素上,
- * 前缀是一个前缀为“@”符号的属性,后跟触发器名称和用于确定该触发器的状态值的表达式.
- *
- * `.``html
- * <!-- animation-cmp.html -->
- * <div @myTriggerName="expression">...</div>
- * `.``
- *
- * 对于要执行的状态更改,“expression”值必须将值从现有值更改为我们将动画设置为动画
- * (在上面的示例中,我们正在监听“on”和“off”之间的状态更改`)。
- * 附加到触发器的“expression”值必须是可以使用模板/组件上下文来评估的值.
- *
- * ### DSL动画功能
- *
- * 请访问下面列出的每个动画DSL功能,以更好地了解如何以及为什么用于在Angular中制作动画:
- *
- * - {@link trigger trigger()}
- * - {@link state state()}
- * - {@link transition transition()}
- * - {@link group group()}
- * - {@link sequence sequence()}
- * - {@link style style()}
- * - {@link animate animate()}
- * - {@link keyframes keyframes()}
- */</span>
- animations?: <span class="hljs-built_in">any</span>[];
- <span class="hljs-comment">/**
- * 指定模板和样式应如何封装:
- * - {@link ViewEncapsulation#Native `ViewEncapsulation.Native`} to use shadow roots - 仅在平台上可用的情况下才起作用,
- * - {@link ViewEncapsulation#Emulated `ViewEncapsulation.Emulated`} 使用模仿本机行为的shimmed CSS,
- * - {@link ViewEncapsulation#None `ViewEncapsulation.None`} 使用全局CSS而没有任何封装.
- *
- * 当没有为组件定义“封装”时,将使用{@link CompilerOptions}中的默认值。 默认为“ViewEncapsulation.Emulated”}。 提供一个新的`CompilerOptions`来覆盖这个值.
- *
- * 如果封装设置为“ViewEncapsulation.Emulated”,并且组件没有“样式”和“styleUrls”,封装将自动切换到“ViewEncapsulation.None”.
- */</span>
- encapsulation?: ViewEncapsulation;
- <span class="hljs-comment">/**
- * 覆盖默认的封装开始和结束分隔符(分别为{{`和`}}`)
- */</span>
- interpolation?: [<span class="hljs-built_in">string</span>, <span class="hljs-built_in">string</span>];
- <span class="hljs-comment">/**
- * 定义此组件时,还要定义应编译的组件。 对于此处列出的每个组件,Angular将创建一个{@link ComponentFactory}并将其存储在{@link ComponentFactoryResolver}.
- */</span>
- entryComponents?: <span class="hljs-built_in">Array</span><Type<<span class="hljs-built_in">any</span>> | <span class="hljs-built_in">any</span>[]>;
- }
- <span class="hljs-comment">/**
- * 组件装饰器和元数据.
- *
- * @stable
- * @Annotation
- */</span>
- <span class="hljs-keyword">export</span> <span class="hljs-keyword">declare</span> <span class="hljs-keyword">const</span> Component: ComponentDecorator;
- <span class="hljs-comment">/**
- * 管道装饰器/构造函数的类型.
- *
- * @stable
- */</span>
- <span class="hljs-keyword">export</span> <span class="hljs-keyword">interface</span> PipeDecorator {
- <span class="hljs-comment">/**
- * 声明可重复使用的管道功能.
- *
- * 只有当输入或任何参数发生变化时,才会重新评估“纯”管道.
- *
- * 当未指定时,管道默认为纯.
- */</span>
- (obj: Pipe): TypeDecorator;
- <span class="hljs-comment">/**
- * 请参阅{@link Pipe}装饰器.
- */</span>
- <span class="hljs-keyword">new</span> (obj: Pipe): Pipe;
- }
- <span class="hljs-comment">/**
- * 管道元数据的类型.
- *
- * @stable
- */</span>
- <span class="hljs-keyword">export</span> <span class="hljs-keyword">interface</span> Pipe {
- name: <span class="hljs-built_in">string</span>;
- pure?: <span class="hljs-built_in">boolean</span>;
- }
- <span class="hljs-comment">/**
- * 管道装饰器和元数据.
- *
- * @stable
- * @Annotation
- */</span>
- <span class="hljs-keyword">export</span> <span class="hljs-keyword">declare</span> <span class="hljs-keyword">const</span> Pipe: PipeDecorator;
- <span class="hljs-comment">/**
- * 输入装饰器/构造函数的类型.
- *
- * @stable
- */</span>
- <span class="hljs-keyword">export</span> <span class="hljs-keyword">interface</span> InputDecorator {
- <span class="hljs-comment">/**
- * 声明数据绑定输入属性.
- *
- * Angular.
- *
- * `Input`接受一个可选参数,指定在模板中实例化组件时使用的名称。 未提供时,将使用装饰属性的名称.
- *
- * ### Example
- *
- * 以下示例创建一个具有两个输入属性的组件.
- *
- * `.``typescript
- * @Component({
- * selector: 'bank-account',
- * template: `
- * Bank Name: {{bankName}}
- * Account Id: {{id}}
- * `
- * })
- * class BankAccount {
- * @Input() bankName: string;
- * @Input('account-id') id: string;
- *
- * // 此属性未绑定,不会被Angular自动更新
- * normalizedBankName: string;
- * }
- *
- * @Component({
- * selector: 'app',
- * template: `
- * <bank-account bank-name="RBC" account-id="4747"></bank-account>
- * `
- * })
- *
- * class App {}
- * `.``
- * @stable
- */</span>
- (bindingPropertyName?: <span class="hljs-built_in">string</span>): <span class="hljs-built_in">any</span>;
- <span class="hljs-keyword">new</span> (bindingPropertyName?: <span class="hljs-built_in">string</span>): <span class="hljs-built_in">any</span>;
- }
- <span class="hljs-comment">/**
- * 输入元数据的类型.
- *
- * @stable
- */</span>
- <span class="hljs-keyword">export</span> <span class="hljs-keyword">interface</span> Input {
- <span class="hljs-comment">/**
- * 在模板中实例化组件时使用的名称.
- */</span>
- bindingPropertyName?: <span class="hljs-built_in">string</span>;
- }
- <span class="hljs-comment">/**
- * 输入装饰器和元数据.
- *
- * @stable
- * @Annotation
- */</span>
- <span class="hljs-keyword">export</span> <span class="hljs-keyword">declare</span> <span class="hljs-keyword">const</span> Input: InputDecorator;
- <span class="hljs-comment">/**
- * 输出装饰器/构造函数的类型.
- *
- * @stable
- */</span>
- <span class="hljs-keyword">export</span> <span class="hljs-keyword">interface</span> OutputDecorator {
- <span class="hljs-comment">/**
- * 声明一个事件绑定的输出属性.
- *
- * 当输出属性发出一个事件时,附加到该事件的事件处理程序调用该模板.
- *
- * `Output`采用一个可选参数,指定在模板中实例化组件时使用的名称。
- * 未提供时,将使用装饰属性的名称.
- *
- * ### 例
- *
- * `.``typescript
- * @Directive({
- * selector: 'interval-dir',
- * })
- * class IntervalDir {
- * @Output() everySecond = new EventEmitter();
- * @Output('everyFiveSeconds') five5Secs = new EventEmitter();
- *
- * constructor() {
- * setInterval(() => this.everySecond.emit("event"), 1000);
- * setInterval(() => this.five5Secs.emit("event"), 5000);
- * }
- * }
- *
- * @Component({
- * selector: 'app',
- * template: `
- * <interval-dir (everySecond)="everySecond()" (everyFiveSeconds)="everyFiveSeconds()">
- * </interval-dir>
- * `
- * })
- * class App {
- * everySecond() { console.log('second'); }
- * everyFiveSeconds() { console.log('five seconds'); }
- * }
- * `.``
- * @stable
- */</span>
- (bindingPropertyName?: <span class="hljs-built_in">string</span>): <span class="hljs-built_in">any</span>;
- <span class="hljs-keyword">new</span> (bindingPropertyName?: <span class="hljs-built_in">string</span>): <span class="hljs-built_in">any</span>;
- }
- <span class="hljs-comment">/**
- * 输出元数据的类型.
- *
- * @stable
- */</span>
- <span class="hljs-keyword">export</span> <span class="hljs-keyword">interface</span> Output {
- bindingPropertyName?: <span class="hljs-built_in">string</span>;
- }
- <span class="hljs-comment">/**
- * 输出装饰器和元数据.
- *
- * @stable
- * @Annotation
- */</span>
- <span class="hljs-keyword">export</span> <span class="hljs-keyword">declare</span> <span class="hljs-keyword">const</span> Output: OutputDecorator;
- <span class="hljs-comment">/**
- * HostBinding装饰器/构造函数的类型.
- *
- * @stable
- */</span>
- <span class="hljs-keyword">export</span> <span class="hljs-keyword">interface</span> HostBindingDecorator {
- <span class="hljs-comment">/**
- * 声明主机属性绑定.
- *
- * 在更改检测期间,Angular会自动检查主机属性绑定.
- * 如果绑定更改,它将更新指令的主机元素.
- *
- * `HostBinding`接受一个可选参数,
- * 指定要更新的主机元素的属性名称。
- * 未提供时,使用类属性名称.
- *
- * ### 例
- *
- * 以下示例创建了一个在DOM元素上设置“valid”和“invalid”类的指令,该元素具有ngModel伪指令.
- *
- * `.``typescript
- * @Directive({selector: '[ngModel]'})
- * class NgModelStatus {
- * constructor(public control:NgModel) {}
- * @HostBinding('class.valid') get valid() { return this.control.valid; }
- * @HostBinding('class.invalid') get invalid() { return this.control.invalid; }
- * }
- *
- * @Component({
- * selector: 'app',
- * template: `<input [(ngModel)]="prop">`,
- * })
- * class App {
- * prop;
- * }
- * `.``
- * @stable
- */</span>
- (hostPropertyName?: <span class="hljs-built_in">string</span>): <span class="hljs-built_in">any</span>;
- <span class="hljs-keyword">new</span> (hostPropertyName?: <span class="hljs-built_in">string</span>): <span class="hljs-built_in">any</span>;
- }
- <span class="hljs-comment">/**
- * HostBinding元数据的类型.
- *
- * @stable
- */</span>
- <span class="hljs-keyword">export</span> <span class="hljs-keyword">interface</span> HostBinding {
- hostPropertyName?: <span class="hljs-built_in">string</span>;
- }
- <span class="hljs-comment">/**
- * HostBinding装饰器和元数据.
- *
- * @stable
- * @Annotation
- */</span>
- <span class="hljs-keyword">export</span> <span class="hljs-keyword">declare</span> <span class="hljs-keyword">const</span> HostBinding: HostBindingDecorator;
- <span class="hljs-comment">/**
- * HostListener装饰器/构造函数的类型.
- *
- * @stable
- */</span>
- <span class="hljs-keyword">export</span> <span class="hljs-keyword">interface</span> HostListenerDecorator {
- <span class="hljs-comment">/**
- * 声明主机侦听器.
- *
- * 当主机元素发出指定的事件时,Angular将调用装饰的方法.
- *
- * 如果装饰方法返回`false`,那么`preventDefault`应用于DOM事件.
- *
- * ### Example
- *
- * 以下示例声明将点击监听器附加到按钮并计数点击的指令.
- *
- * `.``typescript
- * @Directive({selector: 'button[counting]'})
- * class CountClicks {
- * numberOfClicks = 0;
- *
- * @HostListener('click', ['$event.target'])
- * onClick(btn) {
- * console.log('button', btn, 'number of clicks:', this.numberOfClicks++);
- * }
- * }
- *
- * @Component({
- * selector: 'app',
- * template: '<button counting>Increment</button>',
- * })
- * class App {}
- * `.``
- * @stable
- * @Annotation
- */</span>
- (eventName: <span class="hljs-built_in">string</span>, args?: <span class="hljs-built_in">string</span>[]): <span class="hljs-built_in">any</span>;
- <span class="hljs-keyword">new</span> (eventName: <span class="hljs-built_in">string</span>, args?: <span class="hljs-built_in">string</span>[]): <span class="hljs-built_in">any</span>;
- }
- <span class="hljs-comment">/**
- * HostListener元数据的类型.
- *
- * @stable
- */</span>
- <span class="hljs-keyword">export</span> <span class="hljs-keyword">interface</span> HostListener {
- eventName?: <span class="hljs-built_in">string</span>;
- args?: <span class="hljs-built_in">string</span>[];
- }
- <span class="hljs-comment">/**
- * HostListener装饰器和元数据.
- *
- * @stable
- * @Annotation
- */</span>
- <span class="hljs-keyword">export</span> <span class="hljs-keyword">declare</span> <span class="hljs-keyword">const</span> HostListener: HostListenerDecorator;
- </code></pre>
- </div>
-
- <hr>
- <div class="btn-group btn-group-justified">
-
- <a class="btn" href="01_formControl.html"><b>上一页:</b> formControl</a>
-
-
- <a class="btn" href="03_ng_model.html"><b>下一页:</b> ngModel</a>
-
- </div>
-
- </div>
- <div class="search-results">
- <div class="has-results">
-
- <h1 class="search-results-title"><span class='search-results-count'></span> results matching "<span class='search-query'></span>"</h1>
- <ul class="search-results-list"></ul>
-
- </div>
- <div class="no-results">
-
- <h1 class="search-results-title">No results matching "<span class='search-query'></span>"</h1>
-
- </div>
- </div>
- </div>
- </div>
- </div>
- </div>
- </div>
- </div>
- <footer class="gb-page-footer">
- <div class="container">
- <ul class="menu">
- <li class="pull-right">
- <span class="service-info">Copyright GitBook 2018</span>
- </li>
- <li>
- <a href="#">Return to the top</a>
- </li>
- <li>
- <a href="#">Updated May 30th 18</a>
- </li>
- </ul>
- </div>
- </footer>
- </div>
- <script src="../../../gitbook/gitbook.js"></script>
-
- <script src="../../../gitbook/gitbook-plugin-search-pro/jquery.mark.min.js"></script>
-
-
- <script src="../../../gitbook/gitbook-plugin-search-pro/search.js"></script>
-
-
- <script src="../../../gitbook/gitbook-plugin-livereload/plugin.js"></script>
-
-
- <script src="../../../gitbook/gitbook-plugin-lunr/lunr.min.js"></script>
-
-
- <script src="../../../gitbook/gitbook-plugin-lunr/search-lunr.js"></script>
-
- <script>
- (function() {
- gitbook.page.hasChanged({"page":{"title":"directives_源码解析","level":"3.1.3.3","depth":3,"next":{"title":"ngModel","level":"3.1.3.4","depth":3,"path":"angular/study_notes/from/03_ng_model.md","ref":"angular/study_notes/from/03_ng_model.md","articles":[]},"previous":{"title":"formControl","level":"3.1.3.2","depth":3,"path":"angular/study_notes/from/01_formControl.md","ref":"angular/study_notes/from/01_formControl.md","articles":[]},"dir":"ltr"},"config":{"plugins":["theme-official@2.1.1","-sharing","-fontsettings","sitemap","-search","search-pro","livereload"],"root":"./docs/","styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"pluginsConfig":{"sitemap":{"hostname":"https://blog.honghaitao.net/"},"search-pro":{"cutWordLib":"nodejieba","defineWord":["小需求","基础建设"]},"livereload":{},"highlight":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"theme-official":{},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"theme":"default","pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"variables":{"version":"0.0.1"},"title":"代码收集","gitbook":"3.1.1"},"file":{"path":"angular/study_notes/from/02_directives.md","mtime":"2018-05-30T08:23:34.368Z","type":"markdown"},"gitbook":{"version":"3.1.1","time":"2018-05-30T08:24:15.757Z"},"basePath":"../../..","book":{"language":""}});
- })();
- </script>
-
- </body>
- </html>
|