zoukankan      html  css  js  c++  java
  • 在angular7中创建组件/自定义指令/管道

    在angular7中创建组件/自定义指令/管道

    组件

    使用命令创建组件

    • 创建组件的命令:ng generate component 组件名
    • 生成的组件组成: 组件名.html 、组件名.ts、组件名.less、组件名.spec.ts
    • 在组件的控制器
    @Component({
      selector: 'app-heroes',
      templateUrl: './heroes.component.html',
      styleUrls: ['./heroes.component.less']
    })
    

    手动创建组件

    1. 创建一个组件ts文件
    2. 在组件中设置
    // 1. 导入包,按需导入
    import { Component } from "@angular/core";
    import { CoreEdit, NavLayoutComponent } from "@reco/core";
    import { DinerService } from "../Service";
    
    // 2.定义当前组件的修饰器
    @Component({
      // 支出对外使用的名称
      selector: "diner-birth",
      // 使用的模板
      templateUrl: "./diner.birth.html"
    })
    
    // 导出使用的类
    export class DinerBirthComponent extends CoreEdit {
      constructor(
        private _dinerService: DinerService,
        layout: NavLayoutComponent
      ) {
        super(_dinerService, 'diner-birth', layout);
      }
    
    }
    
    1. 在index.ts文件中引入并导出
    
    // 1. 导入
    import { DinerBirthComponent } from "./diner.birth";
    
    // 2. 导出
    export { DinerBirthComponent }
    
    // 3. 注册
    @NgModule({
        // 这里列出的 NgModule 所导出的可声明对象可用在当前模块内的模板中
        imports: [....],
    
        // declarations:[ 组件 ] 属于该模块的一组组件、指令和管道(统称可声明对象)。
        // 注意点:在这个源数据中只能声明组件、管道、指令
        declarations: [DinerBirthComponent],
    
        // 定义此 NgModule 中要编译的组件集,这样它们才可以动态加载到视图中。
        entryComponents: [....],
    
        // 导出的模块
        exports: [....]
    })
    
    

    指令

    认识指令

    • 说明:在 Angular 中有三种类型的指令:
      • 1.组件 — 拥有模板的指令
      • 2.结构型指令 — 通过添加和移除 DOM 元素改变 DOM 布局的指令
      • 3.属性型指令 — 改变元素、组件或其它指令的外观和行为的指令。

    自定义指令

    • 创建自定义指令的命令: ng g d 目录/指令名称

    • 创建指令

    1. 创建指令的文件ts文件
    2. 在指令文件中写
    import { Directive, ElementRef, Input, Output } from '@angular/core';
    
    // 自定义指令
    @Directive({
      selector: '[dinerHidden]'
    })
    // 导出指令的模块
    export class DinerHiddenDirective {
      // el 代表当前的元素
      constructor(el: ElementRef) {
        // console.log()
        el.nativeElement.style.display = "none"
      }
    }
    
    1. 在index.ts中将该指令导入到ngModule中
    // 1.导入
    import { DinerHiddenDirective } from "./diner.hidden";
    
    // 2.导出
    export const DINER_COMPONENTS: Provider[] = [ DinerHiddenDirective ];
    
    // 3.ngModule中注册
    @NgModule({
        // 这里列出的 NgModule 所导出的可声明对象可用在当前模块内的模板中
        imports: [],
    
        // declarations:[ 组件 ] 属于该模块的一组组件、指令和管道(统称可声明对象)。
        // 注意点:在这个源数据中只能声明组件、管道、指令
        declarations: [DINER_COMPONENTS],
        // 定义此 NgModule 中要编译的组件集,这样它们才可以动态加载到视图中。
        entryComponents: []
    })
    
    
    1. 在页面中引用
     <!-- 隐藏当前的这个标签 -->
      <div class="form-group col-sm-6" dinerHidden>
         
      </div>
    

    管道中的常用API

    asyncPipe

    • 说明:async 管道会订阅一个 Observable 或 Promise,并返回它发出的最近一个值。 当新值到来时,async 管道就会把该组件标记为需要进行变更检测。当组件被销毁时,async 管道就会自动取消订阅,以消除潜在的内存泄露问题。

    CurrencyPipe

    • 说明:把数字转换成金额字符串, 根据本地化规则进行格式化,这些规则会决定分组大小和分组分隔符、小数点字符以及其它与本地化环境有关的配置项。

    DatePipe

    • 说明:把数字转换成金额字符串, 根据本地化规则进行格式化,这些规则会决定分组大小和分组分隔符、小数点字符以及其它与本地化环境有关的配置项。

    DecimalPipe

    • 说明:把数字转换成字符串, 根据本地化规则进行格式化,这些规则会决定分组大小和分组分隔符、小数点字符以及其它与本地化环境有关的配置项。

    自定义管道

    • 创建管道的命令:ng g pipe 目录/管道名称

    • 手动创建管道

      1. 创建ts文件
      import { Pipe, PipeTransform } from '@angular/core';
      
      // 自定义管道 getGender
      @Pipe({
        name: 'getGender'
      })
      
      // 创建的管道的类
      export class GenderPipe implements PipeTransform {
        transform(value: string, exponent: string) {
          if (value == ' ') return "未知"
          return value === 'm' ? "男" : "女"
        }
      }
      
      1. 将这个管道添加到NgModuel中
      // 1. 先导入
      import { GenderPipe } from "./diner.gender";
      
      // 2.导出 
      export const DINER_COMPONENTS: Provider[] = [GenderPipe];
      
      // 3.添加到NgModule中的
      @NgModule({
          // 这里列出的 NgModule 所导出的可声明对象可用在当前模块内的模板中
          imports: [...],
      
          // declarations:[ 组件 ] 属于该模块的一组组件、指令和管道(统称可声明对象)。
          // 注意点:在这个源数据中只能声明组件、管道、指令
          declarations: [DINER_COMPONENTS],
          // 定义此 NgModule 中要编译的组件集,这样它们才可以动态加载到视图中。
          entryComponents: [...]
      })
      
      1. 在页面中引入使用
      ~
      <!-- item.DGender的值为m和w,将对应的m转为男,w转为女 -->
      <td>{{item.DGender | getGender}}</td>
      ~
      
    我始终相信技术能够改变世界
  • 相关阅读:
    区块链解读
    如何在ASP.NET Core项目启动时执行异步定时任务
    深入理解ASP.NET Core中的Program类和Startup类
    VS 2017 .Net Core Error : 项目文件不完整,缺少预期导入。
    dotnet不是内部或外部的命令,也不是可运行的程序或批处理文件
    win10系统卸载matlab时出现exeption calling main怎么解决?
    解决mui错误:Unable to preventDefault inside passive event listener due to target being treated as passive.
    类型"*.Properties.Resources" 没有名为"*"的属性
    C#生成唯一不重复订单号帮助类
    Day16.参数传递(token传递,接口关联等)
  • 原文地址:https://www.cnblogs.com/Aerfajj/p/10640687.html
Copyright © 2011-2022 走看看