angular创建component,angular常用组件

  angular创建component,angular常用组件

  是Component Directive的子类,Component Directive是一个装饰器,用于将一个类标记为有角度的组件。下面这篇文章将带你浏览angular中的@Component decorator,希望对你有所帮助。

  

一、 @Component 装饰器

  1.1 @Component 装饰器的用途

  当声明一个组件时,在组件类的顶部使用@Component decorator来告诉Angular它是一个组件。【相关教程推荐:《angular教程》】

  从“@angular/core”导入{ Component,on init };

  @组件({

  选择器:“应用程序-产品-提醒”,

  templateUrl:“”。/product-alerts.component.html ,

  样式URL:[。/product-alerts . component . CSS ]

  })

  导出类ProductAlertsComponent实现OnInit {

  构造函数(){ }

  ngOnInit() {

  }

  }1.2 @Component 装饰器的常用选项

  @Component Decorator继承自指令。这个css选择器用于标记模板中的指令,并触发指令的实例化。

  1.2.1 继承自@Directive装饰器的选项

  类型描述selectorstringcss选择器名称用于标记模板中的指令(组件)并触发其实例化。inputstring[]Angular将在变化检测期间自动更新输入属性。输入属性定义一组从directiveProperty指向bindingProperty的配置项:

  DirectiveProperty用于指定要将值写入的指令内属性。

  BindingProperty用于指定从中读取值的DOM属性。如果未提供bindingProperty,则假定它与directiveProperty相同。Outputsstring[]一组可以由事件绑定的输出属性。当output属性发出一个事件时,它调用模板中附加到该事件的处理器。每个输出属性都将directiveProperty映射到bindingProperty:

  DirectiveProperty指定发出事件的组件的属性。

  BindingProperty指定要附加的事件处理程序的HTML属性。exportAsstring(一组providesProvider[]服务提供者)的一个或多个名称可用于将此指令分配给模板中的变量。当有多个名称时,请用逗号分隔。查询{[key:string]:any}配置一些将注入到该指令中的查询。将在调用ngAfterContentInit回调之前设置查询。尝试的查询将在调用ngAfterViewInit回调之前设置。True JIT如果为True,指令/组件将被AOT编译器忽略,因此它将永远只被JIT编译。这个选项是为了支持未来的Ivy编译器,现在还不行。Host{[key:string]:string}使用一组键值对将类的属性映射到主机元素的绑定(属性、特性和事件)。Angular在更改检测期间自动检查主机属性绑定。如果绑定的值改变,Angular将更新指令的主机元素。当key是宿主元素的属性时,该属性值将被传播到指定的DOM属性。当键是DOM中的静态属性时,属性值将被传播到主机元素上的指定属性。对于事件处理:

  它的关键是指令想要监听的DOM事件。要监视全局事件,请在事件名称前添加要监视的目标。这个目标可以是窗口、文档或正文。

  它的值是事件发生时要执行的语句。如果语句返回false,将调用这个DOM事件的preventDefault函数。可以在该语句中引用局部变量$event来获取事件数据。1.2.2 @Component自己特有的选项

  选项描述changetectionchangetectionstrategy组件实例化时,Angular会创建一个变化检测器,负责传播组件每个绑定值的变化。该策略是下列值之一:

  更改检测策略# on push (0)将策略设置为CheckOnce(按需)。

  changetectionstrategy # default(1)将策略设置为CheckAlways。ViewProviderProvider []定义了一组可注入的对象,这些对象可以包含该组件在带有moduleIdstring的视图的每个子节点中的模块的ID。该组件必须能够解析模板和样式表中使用的相对URL。SystemJS已经导出了每个模块中的__moduleName变量。在CommonJS中,可以设置为组件模板文件的module . id URL template urlstring URL。如果提供了,就不要用template来提供内联模板。templatestring组件的内联模板。如果提供了,不要用templateUrl提供模板。一个或多个URL,指向包含该组件的CSS样式表的文件。Stylesstring[]该组件使用的一个或多个内联CSS样式。animation any[]一个或多个动画trigger()调用,包括一些state()和transition()定义。EncapsulationViewEncapsulation是模板和CSS样式的样式封装策略。这些值是:

  查看封装。暗影dom:使用暗影DOM。它只在原生支持影子DOM的平台上工作。

  查看封装。Emulated:使用shim CSS来模拟本机行为。

  View encapsulation.none:使用不带任何封装的全局CSS。

  如果未提供,该值将从CompilerOptions中获取。默认的编译器选项是ViewEncapsulation。如果策略设置为ViewEncapsulation,则模拟。如果组件没有指定样式或styleUrls,它将自动切换到ViewEncapsulation。None Interpolation[string,string]覆盖插值表达式的默认起止分隔符({{ and}})。EntryComponentArrayTypeAny[]preservewhitespace boolean为true则保留它,为false则从编译后的模板中删除可能的冗余空白字符。空白指的是JavaScript正则表达式中可以匹配\s的那些字符。默认值为false,除非被编译器选项覆盖。

二、 selector 选择器

  可以使用以下形式之一:

  元素名称:根据元素名称选择【属性】;选择。class:根据类名选择[attribute=value];根据属性名和属性值选择not(子选择器);仅当元素与sub_selector不匹配时,才选择selector1和selector 2;无论选择器1或选择器2是否匹配,都选择2.1 element-name: 根据元素名选取

  @组件({

  选择器:“应用程序元素”,

  模板:。/element.component.html ,

  样式URL:[。/element.component.css]

  })应用元素/应用元素2.2 [attribute]: 根据属性名选取

  @组件({

  选择器:“[应用程序元素]”,

  模板:。/element.component.html ,

  样式URL:[。/element.component.css]

  })div应用程序元素/div2.3 .class: 根据类名选取

  @组件({

  选择器:。应用程序元素,

  模板:。/element.component.html ,

  样式URL:[。/element.component.css]

  })div class= app-element /div

三、 host: {[key:string]:string}

  使用一组键值对将类的属性映射到宿主元素的绑定(属性、特性和事件)。

  Angular在更改检测期间自动检查主机属性绑定。如果绑定的值改变,Angular将更新指令的主机元素。

  当key是宿主元素的属性时,该属性值将被传播到指定的DOM属性。当键是DOM中的静态属性时,属性值将被传播到主机元素上的指定属性。请注意,默认情况下,属性的值是一个变量。如果直接使用属性值,则需要添加字符串单引号或双引号。可以在组件中直接定义变量来处理事件:

  它的关键是指令想要监听的DOM事件。要监视全局事件,请在事件名称前添加要监视的目标。这个目标可以是窗口、文档或正文。它的值是事件发生时要执行的语句。如果语句返回false,将调用这个DOM事件的preventDefault函数。可以在该语句中引用局部变量$event来获取事件数据。3.1 attribute 和 property

  属性:dom元素附加在对象上,比如childNodes,firstChild等。属性:HTML标签特性是dom节点自身属性的异同点:

  部分属性既属于财产,又属于属性,比如编号属性初始化后不会再改变;财产默认值为初始值,会随着数字正射影像图更新所以在angular2中双向绑定实现是由数字正射影像图的财产实现的,所以指令绑定的是财产,但是在某些情况下数字正射影像图不存在某个财产比如colspan,rowspan等,这时想要绑定超文本标记语言标签特性需要用到属性:

  表格宽度=100% 边框=10px实线

  tr

  第/个月

  泰国(Thailand)节省/th

  /tr

  tr

  TD[属性。colspan]=colnum January/TD

  /tr

  tr

  TD[属性。colspan]=colnumFebruary/TD

  /tr

  /表格

  设colnum:number=2;3.2 使用 host 绑定 class

  @组件({

  选择器:。应用程序元素,

  模板:。/element.component.html ,

  样式URL:[ ./element.component.css],

  主机:{

  ““班级。default-class]":"useDefault "

  },

  封装:视图封装。无//让宿主元素也用上element.component.css样式。否则,默认胶囊封装避免半铸钢钢性铸铁(铸造半钢)污染。

  })

  导出类AppElementComponent {

  @ Input()useDefault=true;

  } div class= app-element /div3.3 使用 host 绑定 style

  @组件({

  选择器:。应用程序元素,

  模板:。/element.component.html ,

  样式URL:[ ./element.component.css],

  主机:{

  “[风格。背景]":"输入背景"

  }

  })

  导出类AppElementComponent {

  @ Input()输入背景= red

  } div class= app-element /div3.4 使用 host 绑定事件

  @组件({

  选择器:。应用程序元素,

  模板:。/element.component.html ,

  样式URL:[ ./element.component.css],

  主机:{

  (点击): onClick($event)

  }

  })

  导出类AppElementComponent {

  公共onClick($event) {

  控制台。日志($ event);

  }

  } div class= app-element /div

四、 encapsulation(封装)

  供模板和半铸钢钢性铸铁(铸造半钢)样式使用的样式封装策略。

  4.1 Web Components

  通过一种标准化的非侵入的方式封装一个组件,每个组件能组织好它自身的超文本标记语言结构、CSS样式、JavaScript代码,并且不会干扰页面上的其他元素。

  网组件由以下四种技术组成:

  自定义元素:自定义元素超文本标记语言模板:HTML模板阴影DOM:影子DOMHTMLImports: HTML导入4.2 Shadow DOM

  !声明文档类型

  超文本标记语言

  头

  meta charset=UTF-8

  标题阴影DOM/标题

  style type=text/css 。shadowroot_son {

  颜色:# f00

  }

  /风格

  /头

  身体

  p我不在影子主机内/p

  divHello,世界!/div

  脚本

  //影子宿主(影子主机)

  var shadow host=文档。查询选择器(.影子主机);

  //创建影子根(影子根)

  var shadow root=影子主机。create shadow root();

  //影子根作为影子树的第一个节点,其他的节点比如p节点都是它的子节点。

  shadowRoot.innerHTML=p我在影子主机内/p ;

  /脚本

  /body

  html4.3 ViewEncapsulation

  视图封装允许设置三个可选的值:

  查看封装。仿真:无影子多姆,但是通过有角的提供的样式包装机制来封装组件,使得组件的样式不受外部影响。这是有角的的默认设置视图封装。暗影王国:使用原生的阴影数字正射影像图特性查看封装。无:无影子多姆,并且也无样式包装4.3.1 ViewEncapsulation.None

  从" @角度/核心"导入{组件,视图封装};

  @组件({

  选择器:"我的应用程序",

  模板:` 1

  h4欢迎来到角度世界/h4

  p class=greetHello {{name}}/p

  `,

  风格:[`风格。问候{

  背景:# 369;

  颜色:白色;

  }

  `],

  封装:视图封装。无//无模拟阴影世界

  })

  导出类AppComponent {

  name:string= SEM链接器;

  }视图封装。没有人设置的结果是没有影子多姆,并且所有的样式都应用到整个文档,换句话说,组件的样式会受外界影响,可能被覆盖掉。

  4.3.2 ViewEncapsulation.Emulated

  从" @角度/核心"导入{组件,视图封装};

  @组件({

  选择器:"我的应用程序",

  .

  封装:视图封装。仿真//无仿真阴影世界

  })

  导出类AppComponent {

  name:string= SEM链接器;

  }视图封装。仿真设置导致没有阴影DOM,但是组件的样式被Angular提供的样式包装机制封装,这样组件的样式就不会受到外界的影响。虽然样式仍然应用于整个文档,但是Angular已经为。问候班级。可以看到我们为组件定义的样式已经被Angular修改了。其中_ ngost-cmy-和_ngcontent-cmy-用于实现本地样式。

  4.3.3 ViewEncapsulation.ShadowDom

  从“@angular/core”导入{ Component,view encapsulation };

  @组件({

  选择器:“我的应用程序”,

  .

  封装:视图封装。ShadowDom //None 仿真 ShadowDom

  })

  导出类AppComponent {

  name:string= SEM linker ;

  }ViewEncapsulation的结果。ShadowDom设置是使用原生的Shadow DOM特性。Angular会以浏览器支持的阴影DOM形式渲染组件。

  有关编程的更多信息,请访问:编程视频!那就是在angular里多了解一下@Component decorator的细节。更多请关注我们的其他相关文章!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: