123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770 |
- <!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/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>
-
-
-
-
- <a href="../../../ubuntu/software/" 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>
-
-
-
-
- <a href="../../../git/push.html" class="list-group-item ">
-
-
-
- git~push
-
- </a>
-
-
-
-
- <a href="../../../git/faq.html" class="list-group-item ">
-
-
-
- git~F.A.Q
-
- </a>
-
-
-
- </div>
- </div>
-
- <div class="panel panel-default">
-
- <div class="panel-heading">
- <h3 class="panel-title">NODE&NPM</h3>
- </div>
-
- <div class="list-group">
-
-
-
- <a href="../../../node/0.html" class="list-group-item ">
-
-
-
- <i class="octicon octicon-chevron-right"></i>
-
- node
-
- </a>
-
-
-
-
- <a href="../../../node/npm/0.html" class="list-group-item ">
-
-
-
- npm
-
- </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-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"],"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":["小需求","基础建设"]},"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-31T08:39:58.544Z"},"basePath":"../../..","book":{"language":""}});
- })();
- </script>
-
- </body>
- </html>
|