• reflect-metadata


    1.需要安装这个库:npm install reflect-metadata --save

    2.在定义类或者类方法的时候,可以设置一些元数据,我们可以获取 到在类与类方法上添加的元数据,用的方法就是 Reflect Metadata。 元数据指的是描述东西时用的数据。

     1 @Reflect.metadata('role', 'admin')
     2 class Post {
     3     @Reflect.metadata('role', 'admin')
     4     name = ''
     5 }
     6 
     7 const metadataClass = Reflect.getMetadata('role', Post,);
     8 const metadataObj = Reflect.getMetadata('role', new Post(),'name');
     9 
    10 console.log(metadataClass);// admin
    11 console.log(metadataObj); // admin
    1.我理解的意思是找到对应映射关系的'key',里面的的'admin' 相当于所对应的'value' ,通过'getMetadata'方法中的'key' 去寻找在映射时候添加的'value',在修饰类和类中 属性的时候使用略有差异 
    2.1.当去找'类'所映射的对应关系使用,第一个参数是创建映射时候的'key',第二个 参数是这个'类'
    2.2.当去找'类中属性'对应的映射关系时候,三个参数,第一个参数是创建映射时候的'key' ,第二个参数是这个'实例',第三个是实例中所对应的具体'属性',其实可以很容易理解这里 为什么用的是实例,因为有了实例才有了属性

    1.除了上面'Reflect.metadata' 这种来给'类' 和 '属性' 增加映射关系,还可以 通自带的api'defineMetadata ' 来增加自定义的映射,这里和上面一样有两种 传参使用方法
      1.1 当只有这 三个参数'metadataKey,metadataValue, target'修饰类的
      1.2 当有这 四个参数'metadataKey,metadataValue, target, propertyKey' 修饰属性
    2.参数详细解释:
      2.1 metadataKey -- 设置映射的'key'
      2.2 metadataValue -- 映射'key' 对应的'value'
      2.3 target -- 需要映射对应的类 或者 实例
      2.4 propertyKey 实例上的属性

     1 import 'reflect-metadata'
     2  function PostDec(target:any){
     3      for(let i in target.prototype){
     4         const handle=target.prototype[i]
     5         const path=Reflect.getMetadata('path',target.prototype,i)//获取存的路径
     6         //target.prototype 类Post
     7         //i 属性
     8         handle()
     9      }
    10     
    11  }
    12  function get(path:string){
    13     return function(target:any,propertyKey:string){
    14         Reflect.defineMetadata('path',path,target,propertyKey)
    15         console.log(path,target,propertyKey,1)
    16         //'path'  映射的key值
    17         //path    映射key对应的value值
    18         //target  映射的类
    19         //propertyKey 实例上的属性
    20     }
    21  }
    22  @PostDec
    23  class Post{
    24      @get('/logins')
    25      login(){
    26          console.log('被调用')
    27      }
    28  }
    参考:https://www.kancloud.cn/cyyspring/vuejs/1164186
  • 相关阅读:
    hdu 1312 ( Red and Black )
    hdu 1429 ( 胜利大逃亡(续) )
    zjut 小X的苹果
    hdu 1253 ( 胜利大逃亡 )
    许多事
    1198 ( Farm Irrigation )
    hdu 1241 Oil Deposits
    hdu 1242 ( Rescue )
    hdu 1240 ( Asteroids! )
    zoj2966 build the electric system
  • 原文地址:https://www.cnblogs.com/studyWeb/p/13181067.html
Copyright © 2020-2023  润新知