mixinを使ってプラグインを書く自作vueコンポーネント通信プラグイン
この記事では主に、自作の 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 サイトの他の関連記事を参照してください。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

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

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











Ace は、JavaScript で書かれた埋め込み可能なコード エディターです。 Sublime、Vim、TextMate などのネイティブ エディターの機能とパフォーマンスに匹敵します。あらゆる Web ページや JavaScript アプリケーションに簡単に埋め込むことができます。 Ace は Cloud9 IDE のメイン エディタとして維持されており、Mozilla Skywriter (Bespin) プロジェクトの後継です。

Vue.js は、今日のフロントエンド開発において非常に人気のあるフレームワークとなっています。 Vue.js が進化し続けるにつれて、単体テストの重要性がますます高まっています。今日は、Vue.js 3 で単体テストを作成する方法を検討し、いくつかのベスト プラクティスと一般的な問題と解決策を提供します。

Amap を使用したとき、公式から多くのケースやデモを勧められましたが、これらのケースはすべてネイティブ メソッドを使用してアクセスしており、vue や React のデモは提供されていませんでした。vue2 アクセスについてはオンラインで多くの人が書いていますが、この記事では、 vue3 が一般的に使用される Amap API をどのように使用するかを見ていきます。皆さんのお役に立てれば幸いです。

Vue.js では、開発者は、JSX 構文とテンプレート構文という 2 つの異なる構文を使用してユーザー インターフェイスを作成できます。どちらの構文にもそれぞれ長所と短所があるので、それらの違い、長所と短所について説明します。

実際の開発プロジェクトのプロセスでは、比較的大きなファイルをアップロードする必要がある場合がありますが、その場合はアップロードが比較的遅くなり、バックグラウンドでフロントエンドがファイルのスライスをアップロードする必要がある場合があります。これは非常に簡単です。たとえば、1Aギガバイトのファイル ストリームはいくつかの小さなファイル ストリームに分割され、インターフェイスはそれぞれの小さなファイル ストリームを配信するように要求されます。

chatgpt ミラー サイトで作業していたときに、一部のミラー サイトにはタイプライター カーソル効果がなく、テキスト出力のみがあることがわかりました。とにかくやりたいです。そこで私はそれを注意深く研究し、タイプライターとカーソルの効果を認識しました。ここで、私の解決策とレンダリングを共有します~

要素のドラッグ機能を実装するにはどうすればよいですか?次の記事では、Vue3 を使用してエレガントな要素のドラッグ機能を実装する方法を段階的に説明し、例を通じて関連する知識ポイントを学習します。
![Vue アプリケーションで vuex を使用するときに「エラー: [vuex] 不明なアクション タイプ: xxx」という問題を解決するにはどうすればよいですか?](https://img.php.cn/upload/article/000/887/227/168766615217161.jpg?x-oss-process=image/resize,m_fill,h_207,w_330)
Vue.js プロジェクトでは、vuex は非常に便利な状態管理ツールです。これは、複数のコンポーネント間で状態を共有するのに役立ち、状態の変更を管理する信頼性の高い方法を提供します。ただし、vuex を使用すると、「エラー:[vuex]unknownactiontype:xxx」というエラーが発生することがあります。この記事では、このエラーの原因と解決策について説明します。 1. エラーの原因 vuex を使用する場合、いくつかのアクションと mu を定義する必要があります。
