zoukankan      html  css  js  c++  java
  • Angular框架结构

    Angular框架结构

    • 概述

      • Angular是一套用于构建用户界面的 JavaScript 框架。
      • 由 Google 开发和维护,
      • 主要被用来开发单页面应用程序。
    • 特性

      • MVVM(数据驱动视图思想)
      • 组件化
      • 模块化
      • 指令
      • 服务
      • 依赖注入
      • TypeScript
      • 。。。

    Angular 项目目录结构

    项目目录结构

    • 目录结构
      • e2e 端到端测试
        • protractor.conf.js 端到端测试配置文件
      • node_modules npm安装的第三方包
      • src 存放业务源码
      • .editorconfig 针对编辑器的代码风格约束
      • gitignore Git仓库忽略配置项
      • angular.json AngularCLI脚手架工具配置
      • Karma.conf.js 测试配置文件
      • package.json 项目包说明文件
      • README.md 项目说明文件
      • tsconfig.json TypeScript配置文件,最终打包成js
      • tslint.json TypeScript代码风格校验工具配置文件

    npm scripts介绍

    • package.json配置文件
    "scripts": {
        "ng": "ng", 运行查看 Angular CLI 脚手架工具使用帮助
        "start": "ng serve", 运行开发模式,运行时先启动angular.json
        "build": "ng build --prod", 运行项目打包构建(用于发布到生成环境)
        "test": "ng test", 运行karma单元测试
        "lint": "ng lint", 运行TypeScript代码校验
        "e2e": "ng e2e" 运行protractor端到端测试
      },
    
    • angular.json配置文件
    "sourceRoot": "src", 源码根目录
    "prefix": "app", 使用脚手架工具创建组件的自动命名前缀
    "outputPath": "dist/my-app", 打包编译结果目录
    "index": "src/index.html", 单页面
    "main": "src/main.ts", 模块启动入口
    "polyfills": "src/polyfills.ts", 用以兼容低版本浏览器不支持的 JavaScript 语法特性
    "assets": [ 存放静态资源目录
        "src/favicon.ico",
        "src/assets"
    ], 
     "styles": [ 全局样式文件
        "src/styles.css"
    ],
    "scripts": [] 全局脚本文件
    "test": { karma单元测试相关配置
        "builder": "@angular-devkit/build-angular:karma",
        "options": {
        "main": "src/test.ts",
        "polyfills": "src/polyfills.ts",
        "tsConfig": "tsconfig.spec.json",
        "karmaConfig": "karma.conf.js",
        "assets": [
            "src/favicon.ico",
            "src/assets"
        ],
        "styles": [
            "src/styles.css"
        ],
        "scripts": []
        }
    },
    "lint": { TypeScript代码风格校验相关配置
        "builder": "@angular-devkit/build-angular:tslint",
        "options": {
        "tsConfig": [
            "tsconfig.app.json",
            "tsconfig.spec.json",
            "e2e/tsconfig.json"
        ],
        "exclude": [
            "**/node_modules/**"
        ]
        }
    },
    "e2e": { 端到端测试相关配置
        "builder": "@angular-devkit/build-angular:protractor",
        "options": {
        "protractorConfig": "e2e/protractor.conf.js",
        "devServerTarget": "my-app:serve"
        },
    
    • main.ts 整个模块化系统启动的入口

      • 描述:模块化启动入口
      • 职责:加载启动根模块
      • platformBrowserDynamic().bootstrapModule(AppModule)
      • 浏览器平台动态的启动(AppModule)模块
    • AppModule 上述文件内部代码

      • import { AppModule } from './app/app.module';
      • 描述:项目根模块
      • 职责:把组件、服务、路由、指令等组织到一起,设置启动组件为根组件
      • bootstrap: [AppComponent]
      • 启动根组件
    • AppComponent 上述文件内部代码

      • import { AppComponent } from './app.component';
      • 描述:项目根组件
      • 职责:替换掉 index.html 文件中的 <app-root></app-root> 节点

    Angular ng2与ng1

    • 相比

      • 移除了 controller+$scope 的设计方式,改用了当前主流的组件化构建
      • 相比 ng1 性能更好
      • 优先为移动端设计
      • 更贴合未来标准
        • EcmaScript 6
        • Web Component
      • TypeScript
      • 反正就是更现代化,更好了......
    • 现状

      • 自 Angular 2 之后,官方承诺之后的版本都会兼容到 Angular 2
      • 当前 Angular 最新发布版为 5.x.x
      • 新版的 Angular 在 Github 上也已收获了 3万+ ☆
      • 使用量低于 React 和 Vue

    Angular 核心特性

    组件(Components)

    • 组件:是整个框架的核心,也是终极目标
      • 第一是分治,因为有了组件之后,我们可以把各种逻辑封装在组件内部,避免混在一起
      • 第二是复用,封装成组件之后不仅可以在项目内部复用,而且可以沉淀下来跨项目复用
    // app.component.ts内的代码
    import { Component } from '@angular/core';
    // 在 Angular 中,组件就是一个类class(构造函数的另一种写法)
    // @Component 组件的装饰器
    //  selector 用来定义组件渲染的标签名称,说白了就是组件的名字
    //  templateUrl 用来指定组件的模板文件,组件视图
    //  styleUrls  一个数组,用来存放组件相关的样式文件
    
    //  在vue中,组件有自己的data和methods等选项
    //  在angular中也有,定义在类中
    @Component({
      selector: 'app-root',
      templateUrl: './app.component.html',
      styleUrls: ['./app.component.css']
    })
    export class AppComponent {
      title = 'wing1377';
      
    }
    

    模块(Modules)

    • 模块:是组织业务代码的利器
      • 按照你自己的业务场景,把组件、服务、路由打包到模块里面
      • 形成一个个的积木块,然后再用这些积木块来搭建出高楼大厦
    // app.module.ts内代码
    @NgModule({
      // 组装模块资源:组件、指令、服务
      declarations: [
        AppComponent,
        FooComponent
      ],
      imports: [  // 依赖模块
        BrowserModule
      ],
      providers: [],  // 提供
      bootstrap: [AppComponent] // 指定启动组件
    })
    export class AppModule { }  // 模块导出
    

    模板(Templates)

    • 组件是用来封装对视图的操作的,而我们的所谓的视图其实也就是常规的 HTML 模板
    <!--The content below is only a placeholder and can be replaced.-->
    <!--模板就是MVVM中的视图层-->
    <!-- 
      数据绑定{{}}
      双向数据绑定[(ngModel)]
      条件渲染
      列表渲染
      ...
     -->
    <div style="text-align:center">
      <h1>
        Welcome to {{ title }}!
      </h1>
    </div>
    

    元数据(Metadata)

    • 元数据:告诉 Angular 如何处理组件类。
    /*
        @Component 组件的装饰器
          selector 用来定义组件渲染的标签名称,说白了就是组件的名字
                    将模板的内容加载到标签处
                    相当于vue中的el
          templateUrl 用来指定组件的模板文件
          styleUrls 一个数组,用来存放组件相关的样式文件
    */
    @Component({
      selector: 'app-root',
      templateUrl: './app.component.html',
      styleUrls: ['./app.component.css']
    })
    // 元数据,相当于vue中的data和methods
    export class AppComponent {
      title = '你的第一个 Angular 应用';
      count = 0;
      increment = function(){
          // 在组件方法中,可以直接通过 this 访问组件成员
          this.count++;
      }
    }
    

    数据绑定(Data binding)

    • 和 Vue.js 一样,MVVM 思想(数据驱动视图)
    • 通过特殊的 {{}} 语法将数据绑定到 DOM 元素
    • 当数据改变的时候会影响视图的更新

    指令(Directives)

    • 和 Vue.js 一样,Angular 扩展了 HTML 语法,增加了一些特殊的属性指令
      • *ngFor 循环指令
      • *ngIf 条件判断指令
      • [(ngModel)] 表单控件双向绑定指令

    服务(Services)

    • 服务:是一个广义范畴,包括:值、函数,或应用所需的功能

      • 说白了服务就是针对某个单一或系统功能的封装
        • 例如在 Angular 核心包里面,最典型的一个服务就是 Http 服务
      • 几乎任何东西都可以是一个服务
        • 典型的服务是一个类,具有专注的、明确的用途
        • 它应该做一件特定的事情,并把它做好
        • 例如:日志服务、和服务端接口交互的服务
    • 服务与组件

      • 组件类应保持精简。组件本身不从服务器获得数据、不进行验证输入,也不直接往控制台写日志。 它们把这些任务委托给服务。
      • 服务仍然是任何 Angular 应用的基础。组件就是最大的服务消费者。
      • 组件的任务就是提供用户体验,仅此而已。它介于视图(由模板渲染)和应用逻辑(通常包括模型的某些概念)之间。 设计良好的组件为数据绑定提供属性和方法,把其它琐事都委托给服务。
      • Angular 不会强制要求我们遵循这些原则。 即使我们花 3000 行代码写了一个“厨房洗碗槽”组件,它也不会抱怨什么。

    依赖注入(Dependency injection)

    • “依赖注入”是提供类的新实例的一种方式,还负责处理好类所需的全部依赖。
      • 大多数依赖都是服务。
      • Angular 使用依赖注入来提供新组件以及组件所需的服务。

    总结

    • 我们学到的这些只是关于 Angular 应用程序的八个主要构造块的基础知识

    • 这是 Angular 应用程序中所有其它东西的基础,要使用 Angular,以这些作为开端就绰绰有余了。 但它仍然没有包含我们需要知道的全部。

    • 这里是一个简短的、按字母排序的列表,列出了其它重要的 Angular 特性和服务。

      • 动画
      • 表单
      • HTTP
      • 组件生命周期
      • 管道过滤器
      • 路由
      • 测试
  • 相关阅读:
    eshint的配置
    jsp 或 php 等view之中使用javascript简单处理的使用技巧
    响应式图片,在不同尺寸下切换不同张数
    swiper.js + jquery.magnific-popup.js 实现奇葩的轮播需要
    Websocket 协议的基本使用与示例
    vue手记
    docker 架构
    webpack基本使用
    vue组件、路由、事件
    vue基本使用
  • 原文地址:https://www.cnblogs.com/SharkJiao/p/13585396.html
Copyright © 2011-2022 走看看