この記事では主に、自作の vue コンポーネント通信プラグインのプラグインを作成するための mixin の使用方法を紹介します。 szpoppy は szpoppy の個人的なプロジェクトであり、社内で広く使用されており、常に szpoppy によって保守されています。私は 1 年近く szpoppy と仕事をしてきましたが、よく彼のソース コードを見て、彼から多くのことを学びました。
この記事の構成:
- 1. VUEXとの比較
- 2. プラグインの使い方
- 4. デモデモ
- 5. 具体的な使用方法
- 6. ソースコード解析、Vueプラグインの書き方をmixinを使って教えます(一目でわかる、わかりやすい)
- 「vue-unicom」構文は直感的で使いやすいです。このプラグインは基本的に学習コストがかからず、プロジェクトを大幅に簡素化できます
- vuex が外部にデータ ウェアハウスを作成する場合。レイヤーコンポーネントツリーを表示し、Mutaion を通じてそれを変更します。次に、unicom がコンポーネント間にデータウェアハウスを構築します。パイプを使用すると、コンポーネントは関数を通じてデータを渡したり配布したりできますが、VUEX ほど多くの構文はありません
- VUEX は主に状態管理を行います。 vue-unicom' は純粋に 1 対 1 および 1 対多のコンポーネント通信用です
- 'vue-unicom' のソース コードはわずか 200 行で、ユーザーはその方法をより深く理解できます。 vue コンポーネントを作成します。これは、将来独自のプラグインを作成するときに便利です。何をしたいかわからない場合は、vuex を使用しないでください。 vuex は、vuex を使用するためだけに使用してください。FamilyBucket は、パフォーマンスと実践の観点から、より具体的な構文を追加することができます。
- 電車の切符購入システム
などの規模のアプリケーションに十分対応します。
- 2. 既存の関数
は、任意の 2 つの Vue コンポーネント間で通信の問題を引き起こします。 Vue コンポーネントの特定のグループ
任意の Vue コンポーネントは特定の ID コンポーネントにメッセージを送信します。
- まだ初期化されていないコンポーネントに命令を送信します。
- まだ初期化されていないコンポーネントに命令を送信します。 ;
- 3. 使い方
npm install vue-unicom
import VueUnicom from 'vue-unicom' // 非 cli 也必须 install一下 Vue.use(VueUnicom, { // 制定名称, 默认为 unicom unicom: 'unicom', // 定制分组使用名称 默认为 unicom + 'Name' unicomName: 'unicomName', // 定制id使用名称 默认为 unicom + 'Id' unicomId: 'unicomId' })
コンポーネントの記述例は以下の通りです
// 1. 下载 git clone https://github.com/szpoppy/vue-unicom.git // 2. cd vue-unicom //3.运行demo,可以直接打开src目录下的index.html(推荐这种更方便的方法)也可以用gulp运行 // 4.‘vue-unicom’源代码在‘/src/lib/unicom.js’
Vue.component('ca', { template: '<p></p><p>text:{{text}}#{{unicomId}}</p><p>msg: {{msg}}</p>', unicomName: 'a', unicom: { message: function(sender, text){ this.msg = text } }, data: function(){ return { text: 'component - ca', msg: 'a' } }, mounted(){ console.log(' a component ',this) } })
<p> <ca></ca> <ca></ca> <cb1></cb1> <cb2></cb2> <cc></cc> </p><hr> <cbtn></cbtn>
5.2 コンポーネント内にグループを登録します
{ // Vue中增加 增加unicom参数 // 这里的unicom,指 上面传入的参数 unicom: { // instruct1:通讯指令 // sender:发送指令者($vm) // args:指令发出者附带参数 // 参数如果为对象,是引用类型,如果需要设置,请深度克隆一遍 instruct1 (sender, ...args) { // .... this 为当前组件 }, instruct2 (sender, ...args) { } } }
{ // Vue中增加 增加unicomName参数 // 指定分组 属于 group, 所有实例,都属于这个分组 unicomName: 'group' }
5.4 コンポーネントグループをインスタンスに追加します
{ // 组件可以加入多个分组 unicomName: ['group1', 'group2'] }
<!-- 加入group分组 --> <component></component>
5.6 コンポーネント内で命令を送信
<!-- 指定$vm的 id 为 id1 --> <component></component>
5.7 命令の高度な使用法
instruct1@group (指定されたグループに送信)
instruct1#id1 (指定されたコンポーネントに送信)@group (指定されたコンポーネントを取得)グループコンポーネント)#id1 (指定コンポーネントの取得)
5.8 命令の遅延送信(ワンタイム命令) コマンド使用~
~instruct1から開始(instruct1命令を含むコンポーネントが出現するまで命令を遅延させる) )
~instruct1@group (group という名前のコンポーネントが表示されるまで命令が遅延します) ~instruct1#id1 (id1 という名前のコンポーネントが表示されるまで命令が遅延します)5.9 コンポーネントモニタリング
コンポーネントモニタリングを使用すると、命令が開始されます~ の場合、2 番目のパラメータは callback
~@group (リスニンググループの名前付けグループコンポーネントが表示されます)
~#id1 using using using using ' s ' use 's ' using ' s ‐ ‐ ‐ ‐ ‐ (外観の監視) id1 という名前のコンポーネントの)~
6.1 ximin をプラグインとして使用し、プロトタイプはグローバル関数 (プラグイン メカニズムの焦点) を定義します最初に vue プラグイン メカニズムを読むことをお勧めします https: //cn.vuejs.org/v2/guide/plugins.html ソース コード 'unicom .js' を取得します。最初のステップは、コンパイラーを使用して、インストール関数を除くすべてのメソッドを収集することです次に、入り口のインストールに焦点を当て、プラグインと app.use をインポートするプロセスで、最初のステップです。実際、それは
{ methods:{ method1 () { // 发送 instruct1 指令,参数为 1, 2 this.$unicom('instruct1', 1, 2) } } }と呼ばれるインストール機能です。実際、この部門によれば、次のことが簡単にわかります。このプラグインの制作部分は大きく次の部分に分かれています:
6.1.1 prototype
利用vue原型链挂载一个全局的‘$unicom’方法,可以在全局内调用,也可以作为组件内节点click时的方法,click直接发送数据
<button>发送指令 message</button> <button>发送指令 message@a</button>methods:{ sendData(){ this.$unicom('message@c', '测试数据') } },6.1.2 全局混入mixin
如不了解,建议阅读https://cn.vuejs.org/v2/guide/mixins.html
插件逻辑处理的重点部分:全局混入mixin
props:这个部分非常简单,就是为了让每个组件都能在组件调用时传递变量‘unicom-id’或者‘unicom-name’(一般是静态变量)
watch:这个部分主要就是当组件调用时‘unicom-id’或者‘unicom-name’传递过来的是动态变量对其进行实时监听
beforeCreate:在组件已解析但未加载时,利用‘this.$options’去获取自定义‘unicom’属性,然后在每一个组件内加入事件机制;最后利用Map集合以组件vm作为key,将该组件的分组和通信函数合并的对象作为value存起来
created:在组件已经解析和载入到dom结构之后,从Map集合中获取当前组件的分组和通信函数信息,判断是否有其它组件在当前组件未创建之前给它发送了数据,如果有,响应该延迟发送的数据
destroyed:组件销毁逻辑6.1.3 自定义属性的混合策略optionMergeStrategies
如不了解,建议阅读vue中的optionMergeStrategies
这个部分看起来简单的几行,其实却是个插件开发过程中比较重点的部分
如何理解这个‘optionMergeStrategies’呢?该组件主要针对自定义option属性的混合;官方解释是:’当组件和混入对象含有同名选项时,这些选项将以恰当的方式混合‘。
肯定很多人还是不明白,其实说实话我也不算明白,但是我简单解释一下:
这个东西具体的使用你其实可以仔细的看看vuex对这个的使用和‘vue-unicom’中optionMergeStrategies的使用
官网的这句‘当组件和混入对象含有同名选项时,这些选项将以恰当的方式混合’是很透彻的在讲这个东西的概念
在‘vue-unicom’插件中optionMergeStrategies有两个用处,一般情况下主要是将‘unicom-id’和‘vue-unicom’从原本数据格式变成数组;但是,如果当前组件或者vue全局被混入了和我们插件自定义option属性同名的变量,默认的合并策略是后面定义的option属性覆盖前面的,但是我们这里对合并策略进行了重写,就可以保证当前组件上所有的‘unicom-id’或者‘vue-unicom’属性都被push到一个数组中并挂载在当前组件上
简单理解它在当前插件的作用:子组件和上层组件有相同option属性时,让子组件正确合并上层组件的自定义属性
6.2 为什么可以在组件上直接写‘unicomName’、‘unicom’
我们可以很肯定一点:vue本身并没有这两个option属性,甚至很可能很多人也从来没有自己在组件声明时自定义options属性
如果你没有试过,也没有关系,看了本篇文章之后你就知道了
为什么我们要自定义option属性呢?这两个属性的作用很明确,‘unicomName’是做分组声明的,‘unicom’是做通信函数的;然后在mixin的各个声明周期再利用‘this.$options’获取自定义option属性进行进一步的逻辑处理,并声明optionMergeStrategies合并策略6.3 当前组件的一个亮点
利用map集合以组件vm为单位存储该组件的分组和通信函数
每次存通信函数、分组的时候都会把对应的vm示例存储下来,所以要找通信函数或者对应分组就非常简单这个组件较我一开始使用已经经过了一次对代码更加直观的改进,个人觉得非常值得大家阅读和使用
以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP中文网!
相关推荐:
以上がmixinを使ってプラグインを書く自作vueコンポーネント通信プラグインの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

Javaandjavascriptaredistinctlanguages:javaisusedforenterpriseandmobileapps、whilejavascriptisforinteractivewebpages.1)javaiscompiled、staticatically、andrunsonjvm.2)javascriptisisterted、dynamsornoded.3)

JavaScriptコアデータ型は、ブラウザとnode.jsで一貫していますが、余分なタイプとは異なる方法で処理されます。 1)グローバルオブジェクトはブラウザのウィンドウであり、node.jsのグローバルです2)バイナリデータの処理に使用されるNode.jsの一意のバッファオブジェクト。 3)パフォーマンスと時間の処理にも違いがあり、環境に従ってコードを調整する必要があります。

javascriptusestwotypesofcomments:シングルライン(//)およびマルチライン(//)

PythonとJavaScriptの主な違いは、タイプシステムとアプリケーションシナリオです。 1。Pythonは、科学的コンピューティングとデータ分析に適した動的タイプを使用します。 2。JavaScriptは弱いタイプを採用し、フロントエンドとフルスタックの開発で広く使用されています。この2つは、非同期プログラミングとパフォーマンスの最適化に独自の利点があり、選択する際にプロジェクトの要件に従って決定する必要があります。

PythonまたはJavaScriptを選択するかどうかは、プロジェクトの種類によって異なります。1)データサイエンスおよび自動化タスクのPythonを選択します。 2)フロントエンドとフルスタック開発のためにJavaScriptを選択します。 Pythonは、データ処理と自動化における強力なライブラリに好まれていますが、JavaScriptはWebインタラクションとフルスタック開発の利点に不可欠です。

PythonとJavaScriptにはそれぞれ独自の利点があり、選択はプロジェクトのニーズと個人的な好みに依存します。 1. Pythonは、データサイエンスやバックエンド開発に適した簡潔な構文を備えた学習が簡単ですが、実行速度が遅くなっています。 2。JavaScriptはフロントエンド開発のいたるところにあり、強力な非同期プログラミング機能を備えています。 node.jsはフルスタックの開発に適していますが、構文は複雑でエラーが発生しやすい場合があります。

javascriptisnotbuiltoncorc;それは、解釈されていることを解釈しました。

JavaScriptは、フロントエンドおよびバックエンド開発に使用できます。フロントエンドは、DOM操作を介してユーザーエクスペリエンスを強化し、バックエンドはnode.jsを介してサーバータスクを処理することを処理します。 1.フロントエンドの例:Webページテキストのコンテンツを変更します。 2。バックエンドの例:node.jsサーバーを作成します。


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

ZendStudio 13.5.1 Mac
強力な PHP 統合開発環境

SecLists
SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

MinGW - Minimalist GNU for Windows
このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

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