Os decoradores de métodos não são um recurso exclusivo do Angular. Este recurso também está disponível no es6. Este artigo apresenta principalmente o uso de decoradores de métodos no Angular. [Recomendação de tutorial relacionado: "tutorial angular"]
No es6, decorador (Decorator) é uma sintaxe relacionada a uma classe (classe), usada para anotar ou modificar classes e métodos de classe, o decorador é na verdade uma função executada; durante a compilação, a sintaxe "@nome da função" geralmente é colocada antes da definição de classes e métodos de classe. Existem dois tipos de decoradores: decoradores de classe e decoradores de método de classe.
Em Angular, o decorador mais comum é o decorador da classe @Component, e também podemos adicionar decoradores aos métodos:
modificar
ou substituir a definição de um
definição de um método Dessa forma, podemos usar com flexibilidade essa camada de encapsulamento que nos leva a fazer muitas coisas.
O mais comum é a verificação. Podemos encapsular um método através desta camada para realizar a verificação unificada de permissão. Dessa forma, se você precisar adicionar verificação de permissão a um método, basta adicionar este decorador de método em vez de Repetir para substituir o método. método de verificação.
Ou pode ser uma janela pop-up unificada ou processamento de prompt. Para muitos métodos diferentes, o processamento de prompt unificado pode ser executado após a execução, para que um decorador de método possa ser adicionado para processamento unificado.
Resumindo, o objetivo dos decoradores de métodos é encapsular a lógica unificada de alguns métodos para que possam ser reutilizados quando necessário durante cada chamada de método.
ComoO decorador possui principalmente três parâmetros de entrada
import { Component, OnInit } from '@angular/core'; function log(destino: qualquer, chave: string, descritor: qualquer) { console.log(destino); console.log(chave); console.log(descritor); } @Componente({ seletor: 'app-fn-test', templateUrl: './fn-test.component.html', styleUrls: ['./fn-test.component.scss'] }) classe de exportação FnTestComponent implementa OnInit { construtor() { } ngOnInit(): void { isto.pagar(2,3) } @registro pagar(Preço: número, contagem:número): número { preço de retorno*contagem } }
E a decoração de métodos pode ser subdividida em dois tipos, um é o decorador de métodos que passa parâmetros e o outro é o decorador de métodos que não passa parâmetros.
Existe um atributo descriptor.value no descritor de propriedade, que é o método decorado. Através deste método, podemos obter os parâmetros passados e o resultado da execução da função:
function log(target: any, key: string, descritor: qualquer) { deixe método = descritor.valor; descritor.valor = função (...args: qualquer[]) { var resultado: qualquer = método.apply(this, args); console.log(`método:${chave}, args:${JSON.stringify(args)}, return:${resultado}`); resultado de retorno; } }
Neste caso de passagem de parâmetros, precisamos envolver outra camada fora da função anterior. A função externa pode obter o valor passado, e a função retornada pela camada interna é a mesma que a anterior sem parâmetros. Se quiser usar a função, você pode obter três parâmetros:
function log(nowTime: Date) { console.log(agoraHora); função de retorno(destino: qualquer, chave: string, descritor: qualquer){ deixe método = descritor.valor; descritor.valor = função (...args: qualquer[]) { var resultado: qualquer = método.apply(this, args); console.log(`método:${chave}, args:${JSON.stringify(args)}, return:${resultado}`); resultado de retorno; } } } classe de exportação FnTestComponent implementa OnInit { ... @log(nova data()) pagar(Preço: número, contagem:número): número { return Preço*contagem } } // Terça-feira, 07 de junho de 2022 18:48:22 GMT+0800 (horário padrão da China) //fn-test.component.ts:9 método: pay, args: [2,3], return: 6
Por meio de decoradores de métodos, podemos realizar processamento lógico unificado em métodos dentro da classe, o que pode reduzir muitos custos desnecessários a duplicação de código também pode tornar o método mais simples e reduzir bastante o custo do desenvolvimento secundário subsequente.