検索
ホームページウェブフロントエンドjsチュートリアルmixinを使ってプラグインを書く自作vueコンポーネント通信プラグイン

この記事では主に、自作の vue コンポーネント通信プラグインのプラグインを作成するための mixin の使用方法を紹介します。 szpoppy は szpoppy の個人的なプロジェクトであり、社内で広く使用されており、常に szpoppy によって保守されています。私は 1 年近く szpoppy と仕事をしてきましたが、よく彼のソース コードを見て、彼から多くのことを学びました。

この記事の構成:

    1. VUEXとの比較
  • 2. プラグインの使い方
  • 4. デモデモ
  • 5. 具体的な使用方法
  • 6. ソースコード解析、Vueプラグインの書き方をmixinを使って教えます(一目でわかる、わかりやすい)
  • 1. VUEX を比較します
  • 「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 コンポーネントにメッセージを送信します。 mixinを使ってプラグインを書く自作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'
})
  • 4. デモデモ

    詳しくは、このgithubのreadmeアドレスをご覧ください
  • コンポーネントの記述例は以下の通りです

  • // 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)
        }
    })
  • 5.1 指示を受け取るために登録します
  •     <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) {
    
            }
        }
    }
  • 5.3 コンポーネントが複数のグループに参加します
  • {
        // Vue中增加 增加unicomName参数
        // 指定分组 属于 group, 所有实例,都属于这个分组
        unicomName: 'group'
    }

    5.4 コンポーネントグループをインスタンスに追加します

    {
        // 组件可以加入多个分组
        unicomName: ['group1', 'group2']
    }
  • 5.5指定するインスタンス内の unicomId
    <!-- 加入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属性的混合;官方解释是:’当组件和混入对象含有同名选项时,这些选项将以恰当的方式混合‘。
    肯定很多人还是不明白,其实说实话我也不算明白,但是我简单解释一下:

    1. 这个东西具体的使用你其实可以仔细的看看vuex对这个的使用和‘vue-unicom’中optionMergeStrategies的使用

    2. 官网的这句‘当组件和混入对象含有同名选项时,这些选项将以恰当的方式混合’是很透彻的在讲这个东西的概念

    3. 在‘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中文网!

    相关推荐:

    Vue活动创建项目之路由设计及导航栏的开发

    Vue源码之文件结构与运行机制

    以上がmixinを使ってプラグインを書く自作vueコンポーネント通信プラグインの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

    声明
    この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
    Java vs JavaScript:開発者向けの詳細な比較Java vs JavaScript:開発者向けの詳細な比較May 16, 2025 am 12:01 AM

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

    JavaScriptのデータ型:ブラウザとNodejsに違いはありますか?JavaScriptのデータ型:ブラウザとNodejsに違いはありますか?May 14, 2025 am 12:15 AM

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

    JavaScriptコメント://および / * *を使用するためのガイドJavaScriptコメント://および / * *を使用するためのガイドMay 13, 2025 pm 03:49 PM

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

    Python vs. JavaScript:開発者の比較分析Python vs. JavaScript:開発者の比較分析May 09, 2025 am 12:22 AM

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

    Python vs. JavaScript:ジョブに適したツールを選択するPython vs. JavaScript:ジョブに適したツールを選択するMay 08, 2025 am 12:10 AM

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

    PythonとJavaScript:それぞれの強みを理解するPythonとJavaScript:それぞれの強みを理解するMay 06, 2025 am 12:15 AM

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

    JavaScriptのコア:CまたはCの上に構築されていますか?JavaScriptのコア:CまたはCの上に構築されていますか?May 05, 2025 am 12:07 AM

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

    JavaScriptアプリケーション:フロントエンドからバックエンドまでJavaScriptアプリケーション:フロントエンドからバックエンドまでMay 04, 2025 am 12:12 AM

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

    See all articles

    ホットAIツール

    Undresser.AI Undress

    Undresser.AI Undress

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

    AI Clothes Remover

    AI Clothes Remover

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

    Undress AI Tool

    Undress AI Tool

    脱衣画像を無料で

    Clothoff.io

    Clothoff.io

    AI衣類リムーバー

    Video Face Swap

    Video Face Swap

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

    ホットツール

    ZendStudio 13.5.1 Mac

    ZendStudio 13.5.1 Mac

    強力な PHP 統合開発環境

    SecLists

    SecLists

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

    AtomエディタMac版ダウンロード

    AtomエディタMac版ダウンロード

    最も人気のあるオープンソースエディター

    MinGW - Minimalist GNU for Windows

    MinGW - Minimalist GNU for Windows

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

    MantisBT

    MantisBT

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