2016-09-09 36 views
7

Tôi mới trong Angular 2 nhưng tôi có kinh nghiệm tốt trong Angular 1.x.làm thế nào để thực hiện aop trong góc 2

Tôi nhận được lỗi: Không thể tìm thấy mô-đun 'aspect.js/dist/lib/khía cạnh'

Dưới đây là mã của tôi:

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(', ')}.` 
    ); 
    } 
} 

khía cạnh định nghĩa một lời khuyên được áp dụng cho tất cả các cuộc gọi phương thức bắt đầu bằng cách nhận được trong các lớp chứa dịch vụ regex-pattern (Matter | Customer) trong tên của chúng. Siêu dữ liệu có sẵn cho những lời khuyên có thể chứa các tên phương pháp luận và lớp học thực tế cùng với các thông số phương pháp gọi

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() 
    ); 
    } 
} 

Và xin đề nghị bất kỳ cách nào khác để thực hiện AOP trong angular2

+0

Bạn đang sử dụng trình biên dịch AOT mới của Angular 2? AOT phá vỡ trang trí của bên thứ ba, mà tôi nghĩ rằng họ đang cố gắng giải quyết. Khi chạy theo JIT, trang trí tùy chỉnh của tôi hoạt động hoàn hảo. Tôi nhận ra trang trí và AOP là trực giao, nhưng vì bạn đang sử dụng cú pháp trang trí, chỉ biết rằng nó không hoạt động tốt với AOT vì AOT xóa trang trí trong quá trình gọi là hạ thấp nơi chúng được chuyển thành siêu dữ liệu tĩnh (điều này có thể đã được giải quyết một phần) . (chào mừng bạn đến với AOT: TypeScript với các trang trí bị xóa và các kiểu "cố định" và "không-được-là-ý-là-lỗi-trong-JavaScript") –

+0

Có lẽ bạn có thể mở một vấn đề trên https : //github.com/mgechev/aspect.js. Minko Gechev rất quan tâm đến Angular cũng như –

Trả lời

1

Bạn đã thử kaop-ts chưa? Tôi thấy nó trực quan hơn và nó đang làm việc cho tôi trong một dự án của công ty

// LogAspect.ts 
import { Injectable } from '@angular/core' 
import { AdvicePool, adviceMetadata, IMetadata } from 'kaop-ts' 

@Injectable() 
export class LogAspect extends AdvicePool { 
    static log(@adviceMetadata meta: IMetadata) { 
    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() { 
    // .... 
    } 
} 
+0

liên quan: https://github.com/k1r0s/kaop-ts/issues/5 – k1r0s

Các vấn đề liên quan