Angular.js2服务
来源:互联网 发布:董小飒淘宝店亏损 编辑:程序博客网 时间:2024/06/05 21:52
vue是MVVM框架中相对angular和react 比较容易入手的,有了vue的基础来看angular确实挺有帮助的,但是看到路由的时候,很多angular路由的TypeScript语法和思维确实有些让我转不过弯,下面我就来总结一下我学习完angular路由之后的一些心得。我们用angular官网的例子来讲解,文档代码(https://embed.plnkr.co/?show=preview)
一、app文档里面的文档目录
--------app
----------app.component.ts
----------hero-detial.component.ts
----------app.module.ts
----------hero.services.ts
----------hero.ts
----------mock-heroes.ts
这几个文件分别有什么功能呢?
1.app.component.ts:根组件,将获取到的数据导入组件,渲染到页面上,并且传递给子组件
2.hero-detial.component.ts:子组件,接收父组件传递过来的数据并进行渲染
3.app.module.ts:声明HeroDetailComponent组件,只有声明了才可以使用
4.hero.services.ts:一个接口,一个请求获取数据的接口,请求到的数据可以被每个组件导入
5.hero.ts:声明一个类,并定义数据的类型
6.mock-heroes.ts:模拟数据库
接下来我们一一讲解一下里面的代码
二、代码讲解
1.app.component.ts
import { Component, OnInit } from '@angular/core';//导入类装饰器Component和生命周期钩子OnInit import { Hero } from './hero';//导入hero.ts文件中定义的类import { HeroService } from './hero.service';//导入hero.service.ts文件中请求到的数据 @Component({ selector: 'app-root',//挂载 /*模板可换成templateUrl,这个方法要创建一个文件,然后把template属性里面的HTML代码全部分离开来*/ template: ` <h1>{{title}}</h1> <h2>My Heroes</h2> <ul class="heroes"> <li *ngFor="let hero of heroes" [class.selected]="hero === selectedHero" (click)="onSelect(hero)"> <span class="badge">{{hero.id}}</span> {{hero.name}} </li> </ul> <hero-detail [hero]="selectedHero"></hero-detail> `, styles: [` .selected { background-color: #CFD8DC !important; color: white; } .heroes { margin: 0 0 2em 0; list-style-type: none; padding: 0; width: 15em; } .heroes li { cursor: pointer; position: relative; left: 0; background-color: #EEE; margin: .5em; padding: .3em 0; height: 1.6em; border-radius: 4px; } .heroes li.selected:hover { background-color: #BBD8DC !important; color: white; } .heroes li:hover { color: #607D8B; background-color: #DDD; left: .1em; } .heroes .text { position: relative; top: -3px; } .heroes .badge { display: inline-block; font-size: small; color: white; padding: 0.8em 0.7em 0 0.7em; background-color: #607D8B; line-height: 1em; position: relative; left: -1px; top: -4px; height: 1.8em; margin-right: .8em; border-radius: 4px 0 0 4px; } `], providers: [HeroService] //providers - 服务的创建者,并加入到全局服务列表中,这里的providers存在于app.component.ts这个模块中,}) //所以说,哪个组件需要请求到数据,哪个组件里面就加上providers声明一下数据来源于哪里,服务的创建者是谁export class AppComponent implements OnInit { title = 'Tour of Heroes'; heroes: Hero[]; //声明一个heroes变量,类型为Hero[],其实可以理解成为具有Hero类那种格式的数组 selectedHero: Hero; //声明一个selectedHero变量,类型为Hero /* *原来的写法是这样的heroService = new HeroService();但是 如果有一天我们修改了HeroService的构造函数,我们不得不找出创建过此服务的每一处代码,并修改它。 */ constructor(private heroService: HeroService) { } /* *getheroes函数里面的写法本来是这样的 this.heroService.getHeroes().then(function(heroes){ this.heroes = heroes; }) 把hero.service.ts文件中getHeroes()函数return的值通过heroes传进来,然后赋值给前面声明的heroes变量,此时所有的数据全部赋值给heroes变量了 */ getHeroes(): void {//void表示类型,因为getHeroes没有return值,所以为void this.heroService.getHeroes().then(heroes => this.heroes = heroes);//此处第一个heroes是一个参数,一个参数可以省略括号 } //构造函数不应该包含复杂的逻辑 ngOnInit(): void { this.getHeroes();//此处是调用上面声明并定义了的getHeroes()函数 } onSelect(hero: Hero): void { this.selectedHero = hero; } /* 此处用ES5写法就是 function onSelect(hero){ this.selectedHero = hero; } 上面的Hero是限定hero的类型,void是限定onSelect函数的返回值类型 */}
2.hero-detial.component.ts
import { Component, Input } from '@angular/core';导入类装饰器Component和属性装饰器Inputimport { Hero } from './hero';@Component({ selector: 'hero-detail', //定义标签名 template: ` <div *ngIf="hero"> <h2>{{hero.name}} details!</h2> <div><label>id: </label>{{hero.id}}</div> <div> <label>name: </label> <input [(ngModel)]="hero.name" placeholder="name"/> </div> </div> `})export class HeroDetailComponent {@Input() hero: Hero;}
3.app.module.ts
import { BrowserModule } from '@angular/platform-browser';import { NgModule } from '@angular/core';import { FormsModule } from '@angular/forms';/* 每个组件都必须在一个(且只有一个)Angular模块中声明。打开app.module.ts并且导入HeroDetailComponent,以便我们可以引用它。 */import { AppComponent } from './app.component';import { HeroDetailComponent } from './hero-detail.component';@NgModule({ declarations: [ //把HeroDetailComponent添加到该模块的declarations数组中。 AppComponent, HeroDetailComponent ], imports: [ BrowserModule, FormsModule ], providers: [],//providers除了可以放置在需要用到的组件中之外,还可以放在app.module.ts这个核心文件中 bootstrap: [AppComponent] //bootstrap - 指定应用的主视图(称为根组件),它是所有其它视图的宿主。只有根模块才能设置bootstrap属性。})export class AppModule { }
4.hero.services.ts
import { Injectable } from '@angular/core';import { Hero } from './hero';import { HEROES } from './mock-heroes';@Injectable()/*此处是把HeroService的getHeroes方法改写为返回承诺的形式,原来的格式为 getHeroes(): Hero[] { return HEROES; } */export class HeroService { getHeroes(): Promise<Hero[]> { return Promise.resolve(HEROES); }}
5.hero.ts
export class Hero { id: number; name: string;}
6.mock-heroes.ts
import { Hero } from './hero'; export const HEROES: Hero[] = [ { id: 11, name: 'Mr. Nice' }, { id: 12, name: 'Narco' }, { id: 13, name: 'Bombasto' }, { id: 14, name: 'Celeritas' }, { id: 15, name: 'Magneta' }, { id: 16, name: 'RubberMan' }, { id: 17, name: 'Dynama' }, { id: 18, name: 'Dr IQ' }, { id: 19, name: 'Magma' }, { id: 20, name: 'Tornado' }];
阅读全文
0 0
- Angular.js2服务
- js2
- js2
- js2
- js2
- JS2
- js2
- js2
- angular服务
- angular-服务
- Angular服务
- angular 服务
- angular服务
- Angular服务
- angular 服务
- Angular服务
- Angular 服务
- 【Angular】服务(Service)
- 最新java经典笔试题带详解 30道
- Myeclipse编辑区背景色配置
- Spring Boot Maven Plugin -- repackage目标
- 在eclipse中开发SWT客户端程序
- 基于TP的每日签到代码
- Angular.js2服务
- SVN导入代码,The constructor Service(URL, QName, WebServiceFeature[]) is undefined
- pycaffe读图 cv2.imread 和 caffe.io.loadimage区别
- 删除harbor的日志
- 回文自动机
- 普元 EOS定时任务实现原理
- Thinkphp 邮箱发送 、测试可用
- 第二周项目二
- 改变Ubuntu16.04桌面启动器的位置