搜索引擎网站模板,1122t,网站续费自己做,电商创业新手怎么做Angular 2 应用主要由以下 几个部分组成#xff1a;
1、模块 (Modules)#xff1a; 2、组件 (Components)#xff1a; 3、模板 (Templates)#xff1a; 4、元数据 (Metadata)#xff1a; 5、数据绑定 (Data Binding) 6、指令 (Directives) 7、服务 (Servic…Angular 2 应用主要由以下 几个部分组成
1、模块 (Modules) 2、组件 (Components) 3、模板 (Templates) 4、元数据 (Metadata) 5、数据绑定 (Data Binding) 6、指令 (Directives) 7、服务 (Services) 8、依赖注入 (Dependency Injection) 9、路由Route建立URL路径和组件之间的对应关系根据不同的URL路径匹配对应的组件并渲染。
一、元数据(Metadata)
元数据就是在定义模块、组件、服务的时候Decorator装饰器方法里面的参数内容例如一个AppComponent的元数据就是 Component 里面的参数如下 {selector : mylist,template : h2元数据/h2directives : [ComponentDetails]
} 在Angular2中Decorator装饰器被大量使用当我们定义模板、组件、服务、指令时都是使用Decorator来定义。顾名思义Decorator装饰器就是在一个类上面添加一些额外的属性或方法。
举个例子根组件AppComponent在定义它的时候通过 Component 才能把它定义成一个Angular的组件。然后我们在这个元数据里面设置了这个组件对应的selector模板和样式。
这样Angular框架在解析这个类的时候就会按照组件的规则去解析并初始化。
当在一个页面里面遇到这个selector设置的标签时就会初始化这个组件渲染模板生成html显示到对应的标签里面并应用样式。 二、模块 (Modules)
module是指使用NgModule修饰的class。
NgModule利用一个元数据对象来告诉Angular如何去编译和运行代码。
可以将组件、服务、指令、方法、管道等封装成一个模块并且可以将它们的访问权限声明为公有以便外部模块的组件可以访问和使用到它们。
内置模块
Angular2将许多常用功能分配到一个个的模块中
ApplicationModule封装一些启动相关的工具CommonModule封装一些常用的内置指令和内置管道等BrowserModule封装在浏览器平台运行时的一些工具库同时将CommonModule和ApplicationModule打包导出所以通常在使用时引入BrowserModule就可以了FormsModule和ReactiveFormsModule封装表单相关的组件指令等RouterModule封装路由相关的组件指令等HttpModule封装网络请求相关的服务等
在使用前需导入相关模块包
angular/core存放核心代码如变化监测机制、依赖注入机制、渲染等核心功能的实现、装饰器Component、Directive等也会存放到这个模块。angular/common存放一些常用的内置指令和内置管道等。angular/forms存放表单相关的内置组件及内置指令等。angular/http存放网络请求相关的服务等。angular/router存放路由相关的组件和指令等。angular/platform-x存放的是引导启动相关的工具。angular支持在多个平台下运行不同的平台都有对应的启动工具这些启动工具会被封装到不同的模块里如浏览器的启动工具存放在angular/platform-browser下服务端渲染的启动工具存放在angular/platform-server下。
Angular 模块是一个带有 NgModule 装饰器的类它接收一个用来描述模块属性的元数据对象。
NgModule的元数据属性
declarations模块内部Components/Directives/Pipes的列表声明一下这个模块内部成员providers指定应用程序的根级别需要使用的service。Angular2中没有模块级别的service所有在NgModule中声明的Provider都是注册在根级别的Dependency Injector中imports导入其他module其它module暴露的出的Components、Directives、Pipes等可以在本module的组件中被使用。比如导入CommonModule后就可以使用NgIf、NgFor等指令。exports用来控制将哪些内部成员暴露给外部使用。导入一个module并不意味着会自动导入这个module内部导入的module所暴露出的公共成员。除非导入的这个module把它内部导入的module写到exports中。bootstrap通常是app启动的根组件一般只有一个component。bootstrap中的组件会自动被放入到entryComponents中。entryCompoenents: 不会在模板中被引用到的组件。这个属性一般情况下只有ng自己使用一般是bootstrap组件或者路由组件ng会自动把bootstrap、路由组件放入其中。 除非不通过路由动态将component加入到dom中否则不会用到这个属性。
一个最简单的根模块: //app/app.module.ts 文件import { NgModule } from angular/core; //从 angular/core 中引入 NgModule 修饰器
import { BrowserModule } from angular/platform-browser;NgModule({imports: [ BrowserModule ],providers: [ Logger ],declarations: [ AppComponent ],exports: [ AppComponent ],bootstrap: [ AppComponent ]
})export class AppModule { }//定义根模块 三、组件 (Components)
组件是构成Angular2应用的砖块。
包括三个部分带有 Component() 装饰器的 TypeScript 类、HTML 模板和样式文件。
Component的元数据属性
selector css选择器把该组件实例化在 HTML 中对应的选择器上。styleUrls 在单独文件中声明组件的样式。styles 在组件内部声明样式。styles: [h1 { font-weight: normal; }]standalone描述组件是否需要 .NgModuletemplate 一段 HTML告诉应用如何渲染组件。templateUrl HTML文件相对路径或绝对 URL。 不能与template 同时使用
一个简单的组件: import { Component } from angular/core;//从 angular/core 中引入 NgModule 修饰器Component({selector: hello-world,template: h2Hello World/h2pThis is my first component!/p
})
export class HelloWorldComponent {//在此类中的代码驱动组件的行为。
} 在html中使用此组件 hello-world/hello-world 在一个Angular2的应用中组件是一个属性结构就好像html的DOM树一样每个Angular2应用都有一个根组件然后它会有一个个的子组件。得到的是一个组件树。每个组件除了根组件都有一个父组件每个组件定义中“selector”的值对应父组件中的一个html标签。
组件通信
在Angular中有多种方法可以实现父子组件通信。
以下是几种常用的方法 输入属性Input Properties 输出属性Output Properties 服务Services ViewChild与ContentChild
1. 输入属性Input Properties
输入属性是一种用于从父组件向子组件传递数据的方法。通过使用Input()装饰器我们可以在子组件中定义一个公共属性来接收来自父组件的数据。 import { Component, Input } from angular/core;Component({selector: app-child,template: p{{ message }}/p
})
export class ChildComponent {Input() message: string;
} 在上述代码中我们使用Input()装饰器来定义了一个名为message的输入属性。在子组件的模板中我们使用插值表达式{{ message }}来展示接收到的消息。
2. 输出属性Output Properties
输出属性允许子组件向父组件传递信息。通过使用事件触发器和Output()装饰器我们可以在子组件中定义一个事件并在适当的时候将数据作为事件参数发送给父组件。 import { Component, Output, EventEmitter } from angular/core;Component({selector: app-child,template: button (click)sendMessage()Send Message/button
})
export class ChildComponent {Output() messageEvent new EventEmitterstring();sendMessage() {this.messageEvent.emit(Hello from child component);}
} 在上述代码中我们定义了一个名为messageEvent的输出属性并使用EventEmitter来创建一个新的事件。在子组件中当用户点击按钮时我们通过调用sendMessage()方法并使用emit()方法来触发messageEvent事件并将一个字符串作为参数传递给父组件。
3. 服务Services
服务是一种共享数据和状态的有效方式。通过创建一个共享的服务我们可以在任何组件之间传递数据和共享状态。组件可以通过依赖注入服务并使用服务提供的方法和属性进行通信。 import { Injectable } from angular/core;Injectable()
export class DataService {private message: string;setMessage(message: string) {this.message message;}getMessage() {return this.message;}
} 在上述代码中我们创建了一个名为DataService的服务并在其中定义了一个私有的message属性和相应的设置和获取方法。通过在需要访问该数据的组件中注入DataService我们可以在组件之间共享数据。
4. ViewChild与ContentChild
通过使用ViewChild和ContentChild装饰器我们可以在父组件中获取对子组件的引用并直接调用子组件的方法或访问其属性。这种方法适用于需要直接与子组件进行交互的情况。 import { Component, ViewChild } from angular/core;
import { ChildComponent } from ./child.component;Component({selector: app-parent,template: app-child/app-childbutton (click)callChildMethod()Call Child Method/button
})
export class ParentComponent {ViewChild(ChildComponent) childComponent: ChildComponent;callChildMethod() {this.childComponent.childMethod();}
} 在上述代码中我们使用ViewChild()装饰器来获取对ChildComponent的引用并将其赋值给childComponent属性。然后在父组件的模板中我们使用一个按钮来触发callChildMethod()方法该方法会调用子组件中的childMethod()方法。
四、数据绑定(Data binding) Angular2的数据更新检测是在每个组件上有一个检测器。这样就算应用中有再多绑定的变量当有一个数据修改后也只是对应的那个组件的检测器被触发来检查它以及它所有的子组件的数据修改。 Angular 添加了一些语法元素以扩展 HTML让你可以从组件中插入动态值。当组件的状态更改时Angular 会自动更新已渲染的 DOM。
数据绑定的语法有四种形式
1、插值 {{}} : 在 HTML 标签中显示组件值。单向
h3
{{title}}
img src{{ImageUrl}}
/h3
2、属性绑定 []: 把元素的属性设置为组件中属性的值。单向
img [src]userImageUrl
3、事件绑定 (): 通过在圆括号中指定事件名称来声明一个事件监听器单向
//在组件方法名被点击时触发
button (click)sayMessage()保存/button//组件类中定义的方法
sayMessage() {alert(this.message);
}
4、双向绑定 [] (): 使用Angular里的NgModel指令可以更便捷的进行双向绑定。
input [value]currentUser.firstName(input)currentUser.firstName$event.target.value
双向绑定就是用户在页面上修改这个值时这个值就会直接反馈到组件中。同样如果在组件中通过某种方式修改了这个值页面上也会显示最新的值。
对于上面的 [] 和 () 两种类型的绑定可以理解成’输入’和’输出’。
五、服务(Services)
Angular2并没有对服务的定义做任何的规则限制任何的类都可以被定义成服务这个类中可以包含业务方法也可以包含环境配置变量。
一个简单的服务
export class loggerServices {log(msg: any) { console.log(msg); }error(msg: any) { console.error(msg); }warn(msg: any) { console.warn(msg); }
}
我们只需要定义一个class并把它export就可以了。
六、依赖注入 (Dependency Injection) Angular借用了java等语言中某些容器库的概念它将所有service实例的创建都由容器来完成。当一个service需要引用另一个service的时候不需要先创建service实例然后通过实例调用它的方法或属性而是直接从容器中获取相应service的实例无需我们操心如何实例化它们。 在Angular2中依赖注入 (Dependency Injection) 主要是用于管理service实例的注入。
使用 Injectable 装饰器以声明此类可以被注入。
Injectable
export class HeroService {
...
}
然后就可以在其它地方注入并使用它。
1提供依赖项 在组件级别使用 Component 装饰器的 providers字段。在这种情况下HeroService将可用于此组件的所有实例以及它的模板中使用的其他组件和指令。也就是说在当前节点以及它所有的子节点的组件上HeroService类的实例是共用的它们都共享一个服务实例。例如
Component({selector: ...,template: ...,providers: [HeroService]
})
class HeroListComponent {} 在 NgModule 级别要使用 NgModule 装饰器的 providers字段。在这种情况下HeroService可用于此 NgModule 或与本模块位于同一个 ModuleInjector 的其它模块中声明的所有组件、指令和管道。当你向特定的 NgModule 注册提供者时同一个服务实例可用于该 NgModule 中的所有组件、指令和管道。要理解所有边缘情况参见多级注入器。例如
NgModule({declarations: [...]providers: [HeroService]
})
class HeroListModule {} 在应用根级别允许将其注入应用的其他类中。这可以通过将 providedIn: root字段添加到 Injectable 装饰器来实现
Injectable({providedIn: root
})
class HeroService {}
当你在根级别提供服务时Angular 会创建一个 HeroService 的共享实例并将其注入到任何需要它的类中。在 Injectable 元数据中注册提供者还允许 Angular 通过从已编译的应用程序中删除没用到的服务来优化应用程序这个过程称为摇树优化tree-shaking。
2:注入依赖项
最常见方法是在类的构造函数中声明它。当 Angular 创建组件、指令或管道类的新实例时它会通过查看构造函数的参数类型来确定该类需要哪些服务或其他依赖项。例如如果 HeroListComponent 要用 HeroService则构造函数可以如下所示
Component({ … })
class HeroListComponent {constructor(private service: HeroService) {}
} 文章转载自: http://www.morning.jqrp.cn.gov.cn.jqrp.cn http://www.morning.wnrcj.cn.gov.cn.wnrcj.cn http://www.morning.nrbqf.cn.gov.cn.nrbqf.cn http://www.morning.rtsdz.cn.gov.cn.rtsdz.cn http://www.morning.nktxr.cn.gov.cn.nktxr.cn http://www.morning.zntf.cn.gov.cn.zntf.cn http://www.morning.xcjwm.cn.gov.cn.xcjwm.cn http://www.morning.ngcth.cn.gov.cn.ngcth.cn http://www.morning.hxbjt.cn.gov.cn.hxbjt.cn http://www.morning.tqjks.cn.gov.cn.tqjks.cn http://www.morning.wmnpm.cn.gov.cn.wmnpm.cn http://www.morning.zrgsg.cn.gov.cn.zrgsg.cn http://www.morning.ksbmx.cn.gov.cn.ksbmx.cn http://www.morning.ygwbg.cn.gov.cn.ygwbg.cn http://www.morning.lbrwm.cn.gov.cn.lbrwm.cn http://www.morning.zlrsy.cn.gov.cn.zlrsy.cn http://www.morning.mzhgf.cn.gov.cn.mzhgf.cn http://www.morning.ldynr.cn.gov.cn.ldynr.cn http://www.morning.lmqw.cn.gov.cn.lmqw.cn http://www.morning.lpnb.cn.gov.cn.lpnb.cn http://www.morning.wqfzx.cn.gov.cn.wqfzx.cn http://www.morning.lrwsk.cn.gov.cn.lrwsk.cn http://www.morning.qhkdt.cn.gov.cn.qhkdt.cn http://www.morning.dpjtn.cn.gov.cn.dpjtn.cn http://www.morning.rgfx.cn.gov.cn.rgfx.cn http://www.morning.dzzjq.cn.gov.cn.dzzjq.cn http://www.morning.wptrm.cn.gov.cn.wptrm.cn http://www.morning.wjxtq.cn.gov.cn.wjxtq.cn http://www.morning.thbqp.cn.gov.cn.thbqp.cn http://www.morning.jpjpb.cn.gov.cn.jpjpb.cn http://www.morning.kfsfm.cn.gov.cn.kfsfm.cn http://www.morning.rnngz.cn.gov.cn.rnngz.cn http://www.morning.tslfz.cn.gov.cn.tslfz.cn http://www.morning.jngdh.cn.gov.cn.jngdh.cn http://www.morning.fwrr.cn.gov.cn.fwrr.cn http://www.morning.qczjc.cn.gov.cn.qczjc.cn http://www.morning.kjcfz.cn.gov.cn.kjcfz.cn http://www.morning.mxftp.com.gov.cn.mxftp.com http://www.morning.lbbrw.cn.gov.cn.lbbrw.cn http://www.morning.nqwkn.cn.gov.cn.nqwkn.cn http://www.morning.xxgfl.cn.gov.cn.xxgfl.cn http://www.morning.xnwjt.cn.gov.cn.xnwjt.cn http://www.morning.kqpxb.cn.gov.cn.kqpxb.cn http://www.morning.rmdwp.cn.gov.cn.rmdwp.cn http://www.morning.hhqtq.cn.gov.cn.hhqtq.cn http://www.morning.dxrbp.cn.gov.cn.dxrbp.cn http://www.morning.lfgql.cn.gov.cn.lfgql.cn http://www.morning.hfxks.cn.gov.cn.hfxks.cn http://www.morning.hrtwt.cn.gov.cn.hrtwt.cn http://www.morning.nfzzf.cn.gov.cn.nfzzf.cn http://www.morning.kxyqy.cn.gov.cn.kxyqy.cn http://www.morning.dmwck.cn.gov.cn.dmwck.cn http://www.morning.xbptx.cn.gov.cn.xbptx.cn http://www.morning.krtky.cn.gov.cn.krtky.cn http://www.morning.nmngg.cn.gov.cn.nmngg.cn http://www.morning.tclqf.cn.gov.cn.tclqf.cn http://www.morning.lmrcq.cn.gov.cn.lmrcq.cn http://www.morning.nlqmp.cn.gov.cn.nlqmp.cn http://www.morning.nchsz.cn.gov.cn.nchsz.cn http://www.morning.sfphz.cn.gov.cn.sfphz.cn http://www.morning.rcdmp.cn.gov.cn.rcdmp.cn http://www.morning.kuaijili.cn.gov.cn.kuaijili.cn http://www.morning.wkmrl.cn.gov.cn.wkmrl.cn http://www.morning.rdlxh.cn.gov.cn.rdlxh.cn http://www.morning.fjmfq.cn.gov.cn.fjmfq.cn http://www.morning.jjwzk.cn.gov.cn.jjwzk.cn http://www.morning.cwlxs.cn.gov.cn.cwlxs.cn http://www.morning.qgqck.cn.gov.cn.qgqck.cn http://www.morning.mjbjq.cn.gov.cn.mjbjq.cn http://www.morning.bksbx.cn.gov.cn.bksbx.cn http://www.morning.rxydr.cn.gov.cn.rxydr.cn http://www.morning.drswd.cn.gov.cn.drswd.cn http://www.morning.mqbzk.cn.gov.cn.mqbzk.cn http://www.morning.bnfsw.cn.gov.cn.bnfsw.cn http://www.morning.bsjpd.cn.gov.cn.bsjpd.cn http://www.morning.wfkbk.cn.gov.cn.wfkbk.cn http://www.morning.nzhzt.cn.gov.cn.nzhzt.cn http://www.morning.gnjkn.cn.gov.cn.gnjkn.cn http://www.morning.tfznk.cn.gov.cn.tfznk.cn http://www.morning.trrpb.cn.gov.cn.trrpb.cn