デコレータとは何ですか?この記事ではデコレータについて紹介し、jsやvueでのデコレータの使い方を簡単に紹介しますので、お役に立てれば幸いです。
# 開発中に二次的なポップアップ確認が必要になったことがあると思います。 UI フレームワークの 2 番目のポップアップ コンポーネントを使用しているか、独自のカプセル化されたポップアップ コンポーネントを使用しているか。いずれも、複数回使用すると大量のコードが繰り返される問題を避けることはできません。これらのコードが蓄積されると、プロジェクトの可読性が低下します。プロジェクトのコードの品質も非常に悪くなりました。では、ポップアップ コードが重複する問題はどのように解決すればよいでしょうか? デコレータの使用
デコレータとは何ですか?
Decorator
は ES7
の新しい構文です。 Decorator
クラス、オブジェクト、メソッド、プロパティを装飾します。それにいくつかの追加の動作を追加します。平たく言えば、コードの一部を二次的にパッケージ化したものです。
デコレータの使用法
使用方法は非常に簡単で、関数を定義します
const decorator = (target, name, descriptor) => { var oldValue = descriptor.value; descriptor.value = function(){ alert('哈哈') return oldValue.apply(this,agruments) } return descriptor } // 然后直接@decorator到函数、类或者对象上即可。
デコレータの目的はコードを再利用することです。まずは小さな例を見てみましょう。
js でデコレータを使用する
//定义一个装饰器 const log = (target, name, descriptor) => { var oldValue = descriptor.value; descriptor.value = function() { console.log(`Calling ${name} with`, arguments); return oldValue.apply(this, arguments); }; return descriptor; } //计算类 class Calculate { //使用装饰器 @log() function subtraction(a,b){ return a - b } } const operate = new Calculate() operate.subtraction(5,2)
デコレータを使用しない
const log = (func) => { if(typeof(func) !== 'function') { throw new Error(`the param must be a function`); } return (...arguments) => { console.info(`${func.name} invoke with ${arguments.join(',')}`); func(...arguments); } } const subtraction = (a, b) => a + b; const subtractionLog = log(subtraction); subtractionLog(10,3);
この比較では、デコレータを使用した後のコードの可読性が向上していることがわかります。もっと強くなる。デコレータは内部コードの実装を気にしません。
vue でのデコレータの使用
プロジェクトが vue-cli でビルドされており、vue-cli のバージョンが 2.5 以降の場合は、設定なしで使用できます。プロジェクトに eslit も含まれている場合は、eslit でのデコレータ関連の構文検出のサポートを有効にする必要があります。 [関連する推奨事項: vue.js ビデオ チュートリアル ]
//在 eslintignore中添加或者修改如下代码: parserOptions: { ecmaFeatures:{ // 支持装饰器 legacyDecorators: true } }
このコードを追加すると、eslit はデコレータ構文をサポートします。
通常、プロジェクトでは、削除操作に 2 番目のポップアップ ボックスをよく使用します。
//decorator.js //假设项目中已经安装了 element-ui import { MessageBox, Message } from 'element-ui' /** * 确认框 * @param {String} title - 标题 * @param {String} content - 内容 * @param {String} confirmButtonText - 确认按钮名称 * @param {Function} callback - 确认按钮名称 * @returns **/ export function confirm(title, content, confirmButtonText = '确定') { return function(target, name, descriptor) { const originValue = descriptor.value descriptor.value = function(...args) { MessageBox.confirm(content, title, { dangerouslyUseHTMLString: true, distinguishCancelAndClose: true, confirmButtonText: confirmButtonText }).then(originValue.bind(this, ...args)).catch(error => { if (error === 'close' || error === 'cancel') { Message.info('用户取消操作')) } else { Message.info(error) } }) } return descriptor } }
上記のコード確認メソッドは、element-ui の MessageBox
コンポーネントを実行します。ユーザーがキャンセルすると、Message
コンポーネントはユーザーに操作をキャンセルするよう求めます。
test() メソッドをデコレータで装飾しましょう
import { confirm } from '@/util/decorator' import axios form 'axios' export default { name:'test', data(){ return { delList: '/merchant/storeList/commitStore' } } }, methods:{ @confirm('删除门店','请确认是否删除门店?') test(id){ const {res,data} = axios.post(this.delList,{id}) if(res.rspCd + '' === '00000') this.$message.info('操作成功!') } }
このとき、ユーザーはストアをクリックして削除します。デコレーターが活躍します。ポップアップは次のとおりです。
キャンセルをクリックしたとき:
ヒント: ユーザーは操作をキャンセルしました。変更されたテスト メソッドは を実行しません。
[OK] をクリックすると:
インターフェイスが呼び出され、メッセージがポップアップ表示されます
概要
デコレータコードの一部を再パッケージ化するために使用されます。いくつかの動作操作と属性をコードに追加します。デコレータを使用すると、コードの重複を大幅に減らすことができます。コードの可読性を向上させます。
最後に
記事に不備がございましたら、ご批判、ご指摘をお願いいたします。
プログラミング関連の知識について詳しくは、プログラミング入門をご覧ください。 !
以上がデコレーターとは何なのかを簡単に説明します。 Vue でデコレータを使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

本篇文章带大家聊聊vue指令中的修饰符,对比一下vue中的指令修饰符和dom事件中的event对象,介绍一下常用的事件修饰符,希望对大家有所帮助!

如何覆盖组件库样式?下面本篇文章给大家介绍一下React和Vue项目中优雅地覆盖组件库样式的方法,希望对大家有所帮助!

这是我们手把手教你实现 Python 定时器的第三篇文章。前两篇:分别是手把手教你实现一个 Python 计时器,和用上下文管理器扩展 Python 计时器,使得我们的 Timer 类方便用、美观实用。但我们并不满足于此,仍然有一个用例可以进一步简化它。假设我们需要跟踪代码库中一个给定函数所花费的时间。使用上下文管理器,基本上有两种不同的选择:1. 每次调用函数时使用 Timer:with Timer("some_name"): do_something()当我们在一

Python中的装饰器和上下文管理器是如何工作的?在Python中,装饰器和上下文管理器是两个非常有用的概念和功能。它们都是为了简化代码、增加代码可读性以及方便代码的重用。一、装饰器装饰器是Python中一种用于修改函数的行为的特殊函数。它允许我们在不修改原始函数的情况下对其进行包装或拓展。装饰器在许多Python的框架和库中被广泛使用,比如Flask、Dj

react与vue的虚拟dom没有区别;react和vue的虚拟dom都是用js对象来模拟真实DOM,用虚拟DOM的diff来最小化更新真实DOM,可以减小不必要的性能损耗,按颗粒度分为不同的类型比较同层级dom节点,进行增、删、移的操作。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

SublimeText3 中国語版
中国語版、とても使いやすい

SublimeText3 英語版
推奨: Win バージョン、コードプロンプトをサポート!

MantisBT
Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

ドリームウィーバー CS6
ビジュアル Web 開発ツール

WebStorm Mac版
便利なJavaScript開発ツール

ホットトピック



