angular总结2

依赖注入

依赖注入(DI):

如果一个对象A要依赖一个类型为B的对象,A无需实例化B,使用依赖注入机制注入

控制反转(IOC):

将依赖的控制权由代码的内部转移到代码的外部。
依赖注入与控制反转是一体两面,表达的是一个思想,控制反转侧重于描述目的,其目的是将代码的控制权由内部转移至代码的外部;而依赖注入侧重于描述手段,如何来实现控制反转。
angular就是一个IOC容器。

依赖注入的优势:

松耦合和可重用
提高可测性

@NgModule({
    providers:[
    //这是一个token:用来表示可被注入的一个类型
    {provide: ProductService, useClass: ProductService}
    ]
    })
export class ProductComponent {
    product: Product;
    constructor(productService: ProductService){
    this.product = productService.getProduct();
    }
} 

providers: 需要注入的对象数组
token:{provide: ProductService, useClass: ProductService};
token的配置类型由providers中的provide属性决定。上面的代码解释为:注册一个类型是ProductService的token,当有指令或组件声明自己需要一个类型为ProductService的token时,实例化一个ProductService(useClass),并将其注入到目标对象。
声明:在constructor中声明。
注入器:constructor(private productService: (providers中的provide)){}
提供器:providers,当providers中的Provider与useClass相同时,可简写为一个
providers: [{provider: ProductService, useClass: ProductService}] === providers: [ProductService]

使用工厂和值声明提供器:

providers: [{
    provide: ProductService,
    useFactory: (logger: LoggerService, appConfig) => {
        if(appConfig.isDev) {
            return new ProductService(logger);
        } else {
            return new AnotherProductService(logger);
        },
        // 定义工厂方式依赖的对象,并将对象注入至工厂参数中
        deps: [LoggerService, 'APP_CONFIG']
    }, LoggerService,
    //注入常量
    {
        provide: 'APP_CONFIG', useValue: {isDev: false}
    }],

angular中只有一种注入器,即构造函数注入器

数据绑定

事件绑定

这里写图片描述

注:html属性不会变,DOM属性会变化。

<input value='senai' (input)='change($evnet)'>

    change(event:any) {
        //Dom属性,会随输入的值而变
        console.log(event.target.value);
        //Html属性,只初始化一次代码,不会随输入的值而变
        console.log(event.target.getAttribute('value');
    }

HTML属性和DOM属性的关系:
少量HTL属性和DOM属性之间有着1:1的映射,如id.
有些HTML属性没有对应的DOM属性,如colspan。
有些DOM属性没有对应的HTML属性,如textContent。
就算名字相同,HTML属性和DOM属性也不是同一东西。
HTML属性的值指定了初始值,DOM属性的值表示当前值。DOM属性的值可以改变;HTML属性的值不能改变。
模板绑定是通过DOM属性和事件来工作的,而不是HTML属性。

HTML属性绑定

基本HTML属性绑定

<td [attr.colspan]='tableColspan'>something</td>

css类绑定

//[class]的值完全替换掉div本身的class
<div class='aaa bbb' [class]='someExpression'>something</div>
//isSpecial为true是加special
<div [class.special]='isSpecial'>something</div>
//控制一组class
<div [ngClass]='{{aaa: isA, bbb: isB}'>

样式绑定

<button [style.color]='isSpecial ? 'red':'green'>red</button>
<div [ngStyle]="{'font-style': this.canSave ? 'italic' : 'normal'}"
双向绑定
[(ngModel)]='name'
响应式编辑
观察者模式与Rxjs

这里写图片描述

观察者由可观察对象与观察者构成,初始化可观察对象时,向可观察对象中注册一些观察者对象。当这些对象发生变化时,调用观察者中的属性与方法来将变化通知观察者以进行处理。

//可观察对象Observalbe(流):表示一组值或者事件的集合
var subscription = Observable.from([1,2,3,4])
//操作符operators: 纯粹的函数,使开发者可以以函数编程的方式处理集合。eg:filter,map。
          .filter((e)=> e%2 ==0)
          .map((e)=> e*e)
          //观察者Observer:一个回调函数集合,它知道怎样去监听Observable发送的值。
          //订阅subscription : 表示一个可观察对象,主要用于取消注册。
          .subscribe(
          //数据处理的方法

              e=> console.log(e),
          //异常处理的方法
          err=console.error(err),
          //结束时处理的方法
          () => console.log('结束')
);

//取消订阅
subscription.unsubscribe()

注:万物都可使用流(观察者模式)来处理,包括事件、http请求等等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值