繁体   English   中英

如何在角度2中实现aop

[英]how to implement aop in angular 2

我是Angular 2的新手,但我在Angular 1.x中有很好的经验。

我收到错误:无法找到模块'aspect.js / dist / lib / aspect'

以下是我的代码:

logging.aspect.ts

import {Injectable} from '@angular/core';
import {beforeMethod, Metadata} from 'aspect.js/dist/lib/aspect';
@Injectable()
export class LogAspect {

  @beforeMethod({
    classNamePattern: /(Matter|Customer)Service/,
    methodNamePattern: /^(get)/
  })
  invokeBeforeMethod(meta: Metadata) {
    console.log(`Inside of the logger.
      Called ${meta.className}.${meta.method.name}
      with args: ${meta.method.args.join(', ')}.`
    );
  }
}

aspect定义了一个建议,该建议应用于以名称中包含regex-pattern(Matter | Customer)服务的类中的get开头的所有方法调用。 建议可用的元数据可能包含实际的方法和类名以及方法调用参数

invoice.service.ts

import {Injectable} from '@angular/core';
import {Http} from '@angular/http';
import {Observable} from 'rxjs/Observable';
import 'rxjs/Rx';
import {Wove} from 'aspect.js/dist/lib/aspect';
import {Matter} from './Matter.model';
@Injectable()
@Wove()
export class MatterService{
  private url: string;
  constructor(private http: Http) {
    this.url = '/data/matters/data.json';
  }
  get(): Observable<Matter[]> {
    return this.http.get(this.url)
      .map(
        (response) => <Matter[]>response.json()
      );
  }
}

并建议在angular2中实现AOP的任何其他方法

你试过kaop-ts吗? 我发现它更直观,它适用于我的公司项目

// LogAspect.ts    
export class LogAspect {
  static log(meta) {
    console.log('Called: ', meta.target)
    console.log('Args: ', meta.args)
  }
}

// YourService.ts
import { Injectable } from '@angular/core'
import { beforeMethod } from 'kaop-ts'
import { LogAspect } from './LogAspect'

@Injectable()
export class YourService {
  @beforeMethod(LogAspect.log) 
  get() {
    // ....
  }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM