0

0

一文带你深入了解Angular11

青灯夜游

青灯夜游

发布时间:2021-05-24 10:28:51

|

3375人浏览过

|

来源于csdn

转载

本篇文章给大家介绍一下angular11。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。

一文带你深入了解Angular11

  Angular经历了版本1.0到2.0的飞跃式发展,结合TypeScript这一强有力的工具,Angular正在成为大型前端的重要选项,本问主要介绍了Anguar 10的基本概念,通过相应代码,帮助读者朋友们快速入手。【相关推荐:《angular教程》】


一、Angular发展里程

  AngularJS最初是由Misko Hevery和Adam Abrons于2009年利用业余时间开发的个人项目,最初的项目名称叫GetAngular,设计目标是让Web设计师(非开发者)只使用HTML标签来创建简单的应用程序。随着时间的推移,AngularJS演变成了一个全面的开发框架。2010年,为了推动Google Feedback开发速度和项目的进展,Misko Hevery对基于GWT的Google Feedbac进行重构,将原来17000多行对代码压缩到只有1500多行,从此Angularjs引起了重视,AngularJS转变成Google的公司项目。

  Angular1.0引入了双向数据绑定的概念。2016年微软和Google进行了合作,并采用TypeScript作为新的开发语言,发布了Angular2.0。Angular2.0和Angularjs1.x是完全不同的架构,Angular2.0以后的版本统称Angular2+。Angular1.x的用户群体也比较庞大,相应版本框架也继续进行维护,目前最新版本是1.8.2。Angular2+的最新版本是11.0.0。

在这里插入图片描述

二、发展概况

2.1 双向数据绑定

  在常规的前端开发中,往往数据和视图是通过单项绑定的方式进行关联。这种模型的好处是结果相对简单,model负责数据的更新,结合template进行渲染,view层只负责展示。这种结构的缺点是view层的数据变化无法反馈到model层,对于交互性较强的页面无法满足需求。这时候双向数据绑定应运而生。

Column 1 Column 2
图1 单向数据绑定 图2 双向数据绑定

2.2 核心特性变化

Angularjs双向绑定方式—脏检查

watch = {
    /**  当前的watch对象观测的数据名  **/
    name: ‘’,
    /** 得到新值 **/    
   getNewValue: function($scope) {
       ...
        return newValue;
    },
    /**  当数据发生改变时需要执行的操作  **/
    listener: function(newValue, oldValue) {
        ...
    }
}

任何原生的事件都不会触发脏检查,必须得调用scope.apply通知angular更新UI。

Angular双向绑定方式—猴子补丁

function patchThen(Ctor: Function) {
      ...
      const originalThen = proto.then;
      proto[symbolThen] = originalThen;
      Ctor.prototype.then = function(onResolve: any, onReject: any) {
      		const wrapped = new ZoneAwarePromise((resolve, reject) => {
      			originalThen.call(this, resolve, reject);
      		});
      		return wrapped.then(onResolve, onReject);
      };
      ...
}

  Angular2+中有了Zone.js。原生随便用,setTimeout,addEventListener、promise等都在ngZone中执行,angular并在ngZone中setup了相应的钩子,通知angular2做相应的脏检查处理,然后更新DOM。

三、基本概念

  • Module (模块)
  • Component(组件)
  • Template(模板)
  • Metadata(元数据)
  • Data Binding(数据绑定)
  • Directive(指令)
  • Service(服务)
  • Dependency Injection(依赖注入)

3.1 Module (模块)

ZipMarket数字内容/素材交易网站
ZipMarket数字内容/素材交易网站

ZipMarket程序仿自Envato旗下网站,对于想创建数字内容/素材交易平台的站长来说,ZipMarket是一个十分独特和极具创新的解决方案,用户在你的网站注册并购买或出售数字内容/素材作品时,你可以获得佣金;用户推广用户到你的网站购买或出售数字内容/素材时,引入用户的用户也可以获得佣金。实际上,ZipMarket是一套完美的数字内容类自由职业生态系统,功能不仅限于素材交易,除了模板/主题、文

下载
  • 应用模块化
  • 模块是一个功能紧密的代码块,至少有一个根模块 NgModule(AppModule)
// src/app/app.module.ts
import { NgModule }      from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
@NgModule({
 imports:      [ BrowserModule ],
 providers:    [ Logger ],
 declarations: [ AppComponent ],
 exports:      [ AppComponent ],
 bootstrap:    [ AppComponent ]
})
export class AppModule { }

3.2 Component(组件)

  • 组件控制屏幕上被称为视图的一小片区域
  • 在一个类中定义组件的应用逻辑(主要用来支持视图)。类和视图通过一个属性和方法的API进行交互
  • 通过生命周期钩子执行组件的创建、更新和销毁
// src/app/hero-list.component.ts (class)
export class HeroListComponent implements OnInit {
 heroes: Hero[];
 selectedHero: Hero;

 constructor(private service: HeroService) { }

 ngOnInit() {
   this.heroes = this.service.getHeroes();
 }

 selectHero(hero: Hero) { this.selectedHero = hero; }
}
// src/app/hero-list.component.html
  • 3.3 Template(模板)

    • 以HTML的形式告诉Angular如何渲染组件
    • HTML带有Angular命令 (NgClass、NgStyle、NgIf、NgFor…)
    • 自定义组件
    // src/app/hero-list.component.html
    

    Hero List

    Pick a hero from the list

    • {{hero.name}}

    3.4 Metadata(元数据)

    • Metadata决定Angular的一个类是组件
    • 用TypeScript附加metadata的简单方法是用修饰器
    • @Component函数接受配置对象并转化为metadata
    • 模版、metadata和组件一起控制视图
    • 常用修饰器:@Injectable @Input @Output @RouterConfig
    // src/app/hero-list.component.ts (metadata)
    
    @Component({
     selector:    'app-hero-list',
     templateUrl: './hero-list.component.html',
     providers:  [ HeroService ]
    })
    export class HeroListComponent implements OnInit {
    /* . . . */
    }

    3.5 Data Binding(数据绑定)

    • 把数据值推送到 HTML 控件中,并把来自用户的响应转换成动作和对值的更新
    • 模板、父子组件之间通信
    在这里插入图片描述 在这里插入图片描述 Column 2
    双向绑定的几种形式 属性绑定和事件绑定 模版嵌套
    // src/app/hero-list.component.html (binding)
    
    
  • {{hero.name}}
  • 3.6 Directive(指令)

    • 带有@Directive() 装饰器的类,指示对DOM进行转换
    • 结构型指令和属性型指令
      结构型指令:通过添加、移除或者替换DOM元素来修改布局
    // src/app/hero-list.component.html (structural)
    
    
  • 属性型指令:修改现有元素的外观或行为

    // src/app/hero-detail.component.html (ngModel)
    
    

    3.7 Service(服务)

    • 广义:包括应用所需的任何值、函数或特性,狭义:明确定义了用途的类
    • @Injectable() 装饰器来提供元数据
    // src/app/logger.service.ts (class)
    
    export class Logger {
       log(msg: any)   { console.log(msg); }
       error(msg: any) { console.error(msg); }
       warn(msg: any)  { console.warn(msg); }
    }
    // src/app/hero.service.ts (class)
    
    export class HeroService {
     private heroes: Hero[] = [];
    
     constructor(
       private backend: BackendService,
       private logger: Logger) { }
    
     getHeroes() {
       this.backend.getAll(Hero).then( (heroes: Hero[]) => {
         this.logger.log(`Fetched ${heroes.length} heroes.`);
         this.heroes.push(...heroes); // fill cache
       });
       return this.heroes;
     }
    }

    3.8 Dependency Injection(依赖注入)

    • 为一个类的实例提供全部依赖的方法,大部分依赖是服务
    • 全应用级别注入器机制
    • 注入前必须注册一个提供者(Provider),然后返回服务类本身
      全局注册
    @Injectable({
       providedIn: 'root',
    })

    特定注册

    @NgModule({
       providers: [
          BackendService,
          Logger
        ],
        ...
    })

    注入

    // src/app/hero-list.component.ts (component providers)
    
    @Component({
       selector:    'app-hero-list',
       templateUrl: './hero-list.component.html',
       providers:  [ HeroService ]
    })

    四、创建第一Angular项目

    4.1 基于Angular CLI

    • 安装Node.js 的当前版、活跃 LTS 版或维护期 LTS版
    • 安装Angular CLI
    npm install -g @angular/cli
    • 创作工作空间和初始应用
    npm new my-app
    • 运行应用
    cd my-app
    ng server --open

    4.2 基于Angular Quickstart

    • 克隆Quickstart项目
    git clone https://github.com/angular/quickstart.git my-app
    • 进入项目并安装依赖
    cd ./my-app
    npm run install
    • 启动项目
    npm start

    五、对比VUE

    5.1 技术对比

    主要点 Angular VUE
    设计目标 全面的解决方案(浏览器端、服务端、客户端),基本包含了开发全流程 渐进增强,扩展性强,用户选择余地大
    组件 组件是ng2+应用核心,支持Web Component标准,组件生命周期明确 完善的组件系统,可以从template生成或者render渲染,组件有明确的生命周期,使用virtual dom渲染
    异步处理 原生支持RxJS,通过流模型处理异步任务 没有官方异步处理方案,可以用Promise,也可以用RxJS染
    构建部署 支持Just In Time(JIT)和Ahead Of Time(AOT)模式,配合tree shaking可以大幅减少代码体积 配合Webpack打包工具,在不引入组件的情况下,体积更小
    状态管理 ngrx vuex
    安全 对不信值进行编码,避免XSS攻击,使用离线模版编译器,防止模版注入。官方http库防止XSRF 没有强制性阻止XSS攻击机制,输出HTML要注意配合v-html指令
    优点 框架对几乎任何场景,都提供了标准化,更工程化,更适合大型项目多人协作面向新特性,发展空间大 框架可被不同程度的使用,可单独使用核心,也可加入状态管理,提供了更多选项。适合初期快速迭代,性能上没有很大缺陷
    缺点 使用大量第三方库和组件,增加了潜在风险,应用性能可控性降低 由于提供了开发选项,多人协作下,对与使用程度和场景的处理可能不一样,随着项目增大,以快为特点的技术,在工程化和代码管理上可能存在困难。需要程序员手动实现类似依赖注入的功能、代码组织
    选型 业务要求稳定、能够增量开发的项目 快速迭代、可以被替换的项目

    5.2 开源组件库资源对比

    Angular Vue
    Angular Material2 Element UI
    DEVUI Mint UI
    PrimeNg iView UI
    Kendo UI Bootstrap-Vue UI
    Ng-lightning Ant Design Vue UI
    Ng-bootstrap AT-UI UI
    NG-ZORRO cube-ui UI
    NGX Bootstrap Muse-UI UI

    更多编程相关知识,请访问:编程视频!!

    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

    相关专题

    更多
    node.js调试
    node.js调试

    node.js调试可以使用console.log()输出调试信息、断点调试和第三方调试工具。详细介绍:1、console.log()输出调试信息,通过在代码中插入console.log()语句,开发人员可以在控制台输出变量的值、函数的执行结果等信息,以便观察代码的执行流程和状态;2、断点调试,可以在代码中设置断点,以便在特定位置暂停代码的执行,观察变量的值和执行流程等。

    342

    2023.09.19

    JavaScript 全栈开发基础(Node.js + 前端)
    JavaScript 全栈开发基础(Node.js + 前端)

    本专题系统介绍 JavaScript 在全栈开发中的核心知识结构,涵盖 Node.js 基础、Express/Koa 接口构建、前端交互设计、模块化与包管理、数据库连接、前后端数据通信与部署流程。通过完整项目示例,帮助学习者掌握从浏览器到服务器的一体化开发能力,实现真正意义上的全栈入门。

    88

    2025.11.26

    html版权符号
    html版权符号

    html版权符号是“©”,可以在html源文件中直接输入或者从word中复制粘贴过来,php中文网还为大家带来html的相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

    591

    2023.06.14

    html在线编辑器
    html在线编辑器

    html在线编辑器是用于在线编辑的工具,编辑的内容是基于HTML的文档。它经常被应用于留言板留言、论坛发贴、Blog编写日志或等需要用户输入普通HTML的地方,是Web应用的常用模块之一。php中文网为大家带来了html在线编辑器的相关教程、以及相关文章等内容,供大家免费下载使用。

    638

    2023.06.21

    html网页制作
    html网页制作

    html网页制作是指使用超文本标记语言来设计和创建网页的过程,html是一种标记语言,它使用标记来描述文档结构和语义,并定义了网页中的各种元素和内容的呈现方式。本专题为大家提供html网页制作的相关的文章、下载、课程内容,供大家免费下载体验。

    458

    2023.07.31

    html空格
    html空格

    html空格是一种用于在网页中添加间隔和对齐文本的特殊字符,被用于在网页中插入额外的空间,以改变元素之间的排列和对齐方式。本专题为大家提供html空格的相关的文章、下载、课程内容,供大家免费下载体验。

    241

    2023.08.01

    html是什么
    html是什么

    HTML是一种标准标记语言,用于创建和呈现网页的结构和内容,是互联网发展的基石,为网页开发提供了丰富的功能和灵活性。本专题为大家提供html相关的各种文章、以及下载和课程。

    2854

    2023.08.11

    html字体大小怎么设置
    html字体大小怎么设置

    在网页设计中,字体大小的选择是至关重要的。合理的字体大小不仅可以提升网页的可读性,还能够影响用户对网页整体布局的感知。php中文网将介绍一些常用的方法和技巧,帮助您在HTML中设置合适的字体大小。

    500

    2023.08.11

    php源码安装教程大全
    php源码安装教程大全

    本专题整合了php源码安装教程,阅读专题下面的文章了解更多详细内容。

    7

    2025.12.31

    热门下载

    更多
    网站特效
    /
    网站源码
    /
    网站素材
    /
    前端模板

    精品课程

    更多
    相关推荐
    /
    热门推荐
    /
    最新课程
    关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
    php中文网:公益在线php培训,帮助PHP学习者快速成长!
    关注服务号 技术交流群
    PHP中文网订阅号
    每天精选资源文章推送

    Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号