• Angular2 初学小记


    1.与Angular1的异同

      几乎完全不同(什么鬼~

      1)保留一些特性 表达式仍旧用{{}}。

      2)属性指令变为驼峰式 ng-if ---> ngIf

      3)ng-repeat被ngFor代替

      4)ng-model ------> [(ngModule)] 注意符号

      5)Angular2中,自带原始指令要加哈希前缀 #

      6)Angular2新增了对移动端的设计

      7)Angular2摒弃了1中的核心:$scope

      8)Angular2使用zone.js来检测变化。

      9)新增组件类component

            可以说是取代了1中的controller: template&directive+controller = component。

            承担视图部分的工作,这一点类似于react中,组件可以相互嵌套,父子组件之间的通信的主要途径即组件的属性(react中组件间通信依靠props,也是组件的属性),但是component好像要与模板(module)配合插入视图,比较麻烦,隐约是个坑

       10)数据绑定stronger,绑定的机制也完全不同,新增属性的双向、单项绑定以及函数绑定等

       11)主要性能优化改进(有待深究),使用了分层依赖注入系统;基于单向树的变化检测;体积小;在移动端应用中,流量方面占优势;支持影子DOM

    2. typeScript

       TypeScript是微软开发的自由和开源的编程语言,它是js的超集,扩展了js语法。typeScript文件后缀.ts。ts支持es6标准。

       推荐使用typeScript编写angular2代码。

       1)类型批注(目的?):给参数、函数等增加静态类型声明,eg:

            function Area(number, right:number) : number {....}

            常用的批注类型:number,bool,string,没有类型被推断出时即默认为动态的any类型

       2)接口

            interface Shape{

                 name:string;   //这里都是类型批注

                 number;

                 height:number;      

             }

             //将接口作为参数传入,接口本身也可以作为类型批注。shape的类型批注是shape

             Function Area(shape : shape){.....}

             console.log(area({ 30, height:15}));

      3)箭头函数 ()=>

           详情见es6小记

      4)接口

       class Shape{

          area:number;

          color:string;

          //构造器 参数声明为public,以便在外部访问类中的成员 否则会报错~

          constructor( public name:string, number, height:number){

              this.area = width*eight;

          };

          functionName(){...}

       }

       //在外部调用该类

       import {user} from 'url'

       var square = new Shape('square' , 30, 30)

       类成员有public和private修饰符,类似于Java中,public成员可以在任何地方访问,private成员只允许在类中访问。

       5)继承

       类似于Java,类可以被继承并创建一个派生类,关键字extend,派生类继承基类的属性可以用super方法调用基类的构造函数与方法,也可以重写基类的方法

       class Shape3D extends Shape{
            volume:number;
            constructor:(public name:string,number,height:number){
                 super(name,width,height);//调用基类的构造函数
                 this.volume = length*this.area;
             };
             shoutout(){...}//重写基类的shoutout函数
             superShout(){
                   return super.shoutout(); //调用基类的构造函数
             }
       }

    3.ngModules模块

       Angular用ngModule来创建不同的功能相关的代码块(angular模块),在需要的时候只导入需要的angular模块

       每个angular应用至少需要一个root module 

       import {NgModule} from '2angular/core';

       @NgModule({

            imports:[ ],    //需要载入的其他模块

            providers: [ ],   //服务的创建者

            declarationa:[ ],   //视图类属于这个模块

            export:[ ],    //到处可在外部使用该模块

            bootstrap: [ ]  //应用的主视图,所有视图的宿主,只在根模块中声明

       })

    4.component组件

       每个angular应用至少需要一个root component,在angular中,组件本质上是带有模板的一种指令

       import { component } from '@angualr/core';

       @Component({

           selector: 'my-app',   //CSS选择器,可以以<mg-app>标签的形式将组件引入父模板

           template: '<h1>hello angular<h1>'  //这里也可以填模板的URL

           directives:[ ]  //数组,包含此模板需要依赖的组件或指令

           provider:[ ]    //数组,包含组件所依赖的服务的提供者

       })

       //组件可以在文件外被使用 :   import {Appcomponent} from 'url'

       export  class  AppComponent{

           相关逻辑处理,这里相当于component的控制器

       }

       @component是angular的装饰器,它会把一份元数据(即组建的配置项)关联到AppComponent上

    5.数据绑定

      1)插值:表达式仍旧是双括号的形式{{ }},可以用getValue( )获取表达式的值 {{ 1+1+getValue() }} 

           表达式语法类似js,但不是全部,有的表达式是禁止的:赋值表达式(=,+=),new ,++,--, 位运算符( | &)

      2)属性双向绑定:把元素的属性设置为组件中属性的值 形式: [ ]

           <img [src]='image'>  //这里img的src属性会被绑定到组件的属性imgUrl上

          a: angular自带指令:[hidden],[disable],[ngClass]...

          b: 自定义组件的属性:(实现父子组件之间的通讯的重要途径)

          c: HTML原生属性绑定

              html原生属性只是纯粹的属性,它们没有对应的属性可供绑定,所以不能直接给原生属性绑定东东,angular在此场景下,以单项数据绑定的形式(难道就是表达式?)提供解决办法:

              <tr><td [attr.colspan]='1+1' > </td></tr>

       3)CSS类绑定

            <button [style.color]=" isActive? 'red' : 'green' "></button> 这里样式属性可以是中线命名也可以是驼峰命名

       4)事件绑定 形式:()

             <input (keyup) = 'onSave($event)'  (blur) =''>   这里也可以用 on-keyup的形式

             a: 获取用户输入值的方法:

                 1.这里angular把事件对象存入$event中,可以用$event.target.value来获取用户输入的值

                  2.从模板引用变量中获得<input #box (keyup)='0' >  这里box就是模板引用变量,它引用的是input元素本身,所以取值直接是box.value

             b:按键事件过滤

                key:enter  只在用户按下回车键时触发

        5)双向绑定

             <input [value]="" (input)=""  [(ngModel)] > 这里[ ]实现数据流从模板到组件,( )实现数据流从组件到模板,两者结合即实现双向绑定

    6.指令

       属性指令:ngModel,ngIf,ngFor等

       结构指令:用来改变DOM树的结构

    7.服务 Service

       封装的某一特定功能以供复用,复用形式是依赖注入(injector控制反转?)貌似类似于angular1中的?但是代码形式不同

       @Injectable()

        Export class Service{

            Add(){....}  //功能函数

        }

        服务调用:

        import {ServiceName} form 'url'

        再设置component的providers属性

        providers: [Userservice]

    8.表单

       1)使用angular自带CSS类来更新控件状态

             控件已被访问过: ng-touched / ng-untouched

             控件值已发生变化:ng-dirty/ng-pristine

       2)提交表单 ngSubmit

            <form (ngSubmit)='onSubmit()'></form>

  • 相关阅读:
    第二节:ts变量声明、通用js数据类型、ts新数据类型、ts类型补充
    第一节:TypeScript简介(特点、编译环境、运行模式)、基于webpack 或 ts-node运行ts详解
    第十七节:Vuex4.x 之Module详解(局部状态、命名空间、辅助函数等) 和 补充nexttick用法
    第十六节:Vuex4.x 简介及state、getters、mutations、actions详解(OptionApi 和 CompositionApi)
    第十五节:VueRouter4.x用法之router-link/router-view的v-slot、动态增删路由、路由导航守卫
    第十四节:VueRouter4.x简介、基本用法、路由懒加载(打包分析)、动态路由、路由嵌套、相关Api
    第十三节:Vue3高级之 render/h函数、jsx、自定义指令、teleport、插件
    HTML让内部元素居中
    蓝桥杯 Web 应用开发模拟赛首次公开!参赛选手速进!
    蓝桥杯历年真题你刷了吗?过来人教你逆袭!
  • 原文地址:https://www.cnblogs.com/jlliu/p/7474322.html
Copyright © 2020-2023  润新知