• [Typescript Kaop-ts] Use AOP in Vue Components with TypeScript and Kaop-ts


    Aspect Oriented Programming, AOP, allows to reuse logic across an entire app in a very neat way, decoupling it from the business logic. Kaop-ts bring us decorators in order to apply AOP. This lesson will show you how you can move cache and exception handling out of your business logic using TypeScript and Kaop-ts

    install:

    npm i --save kaop-ts

    HTML:

    <button @click="cacheIt">Cache</button>

    Import:

    import { beforeMethod, afterMethod, onException, Metadata } from "kaop-ts";

    Method:

      @beforeMethod(Advice.getCached)
      @afterMethod(Advice.setCached)
      @afterMethod((meta) => Advice.notify(meta, true))
      @onException(Advice.report)
      cacheIt() {
        console.log("Method executed");
        return fetch("https://jsonplaceholder.typicode.com/users/1")
          .then(res => res.json())
          .then(user => (this.userName = user.name));
      }

    Advice:

    class Advice {
      static getCached(meta: Metadata<any>) {
        // Access one prop value
        console.log(
          `Cache: ${meta.scope.checkbox.value} -- ${meta.scope.checkbox.checked}`
        );
        // Component name -- method name
        const key = `${meta.scope.$options["_componentTag"]}--${meta.key}`;
        const cached = localStorage.getItem(key);
        if (cached) {
          meta.scope.userName = cached;
          // if have cache then stop here, won't go though the method
          meta.prevent();
          console.log(meta.scope);
        }
      }
    
      static setCached(meta: Metadata<any>) {
        const key = `${meta.scope.$options["_componentTag"]}--${meta.key}`;
    
        // From value return by original method are stored in meta.result
        if (meta.result) {
          meta.result.then(() => {
            localStorage.setItem(key, meta.scope.userName);
            console.log(meta.scope);
          });
        }
      }
    
      static report(meta: Metadata<any>) {
          console.error('Exception ocurred', meta.exception)
      }
    
      static notify (meta, toServer) {
        // Adding extra params to the function  
        console.log('Notifying', toServer)
      }
    
    }
  • 相关阅读:
    父级和 子集 controller 之间的通讯
    ui-router(三)controller与template
    ui-router详解(二)ngRoute工具区别
    关于MySql全文索引
    Yii提供的Htmler助手checkboxList可自定义Checkbox输出格式
    添加和删除索引以及如何给中间表添加两个主键
    设置数据库及表的默认字符集
    保存数据的时候报类型错误的原因和解决方案
    金融经济
    YII获取刚插入数据的id主键
  • 原文地址:https://www.cnblogs.com/Answer1215/p/9536195.html
Copyright © 2020-2023  润新知