検索
ホームページウェブフロントエンドjsチュートリアルvue の単一ファイルの詳細な紹介 (コード例)

この記事では、Vue の単一ファイルに関する詳細な紹介 (コード例) を紹介します。必要な方は参考にしていただければ幸いです。

vue を開発テクノロジー スタックとして使用するフロントエンド開発者は、多くの場合、フロントエンド構築ツールと連携してプロジェクトのエンジニアリング管理を実行します。たとえば、vue ファミリー バケット + Webpack という一般的に使用されるソリューションは、いくつかの中規模および大規模なフロントエンド プロジェクトの開発に使用されます。 webpack を使用すると、Vue のコンポーネント化の利点がより明白になり、単一ファイルのコンポーネント化開発を通じて実務でフロントエンド ページを構築できるため、開発効率が向上します。こんな質問があります: 「vue 単一ファイルを書くとき、何を書くのですか?」 多くの人は次のように答えるかもしれません: template はテンプレートを担当し、javascript はロジックを担当し、style はスタイル。答えがこの時点に到達すると、Vue 開発者の世界観は基本的に非常に明確になります。必要なのは、テンプレート、JavaScript、スタイルを 1 つのファイル コンポーネントに記述することだけです。これに限定すると、単一ファイル コンポーネントをより有効に活用して開発プロセス全体を実現できないことは明らかです。次に、vue の単一ファイル開発における方法論的な問題について説明します。

vue 単一ファイルのエッセンス

vue 単一ファイルは、特定のファイル拡張子 .vue が付いた名前のファイルです。以下に示すコード: .vue 命名的文件。如下所示的代码:

ListDemo.vue

<template>
    <div>
        <ul>
            <li>{{item.value}}</li>
        </ul>
    </div>
</template>

<script>
export default {
    name: &#39;ListNav&#39;,
    data() {
        return {
            list: [
                { key: &#39;home&#39;, value: &#39;首页&#39; },
                { key: &#39;category&#39;, value: &#39;文章分类&#39; },
                { key: &#39;tags&#39;, value: &#39;标签&#39; },
                { key: &#39;about&#39;, value: &#39;关于我&#39; },
                { key: &#39;links&#39;, value: &#39;友情链接&#39;},
            ],
        };
    },
};
</script>

<style>
.list-demo {
    font-size: 14px;
}
</style>

代码中含有 template,script,style。三者的作用此处就不在赘述,如上的结构展示了一个 vue 单文件基本的文件结构。其背后的理念就是一个单文件组件对应了一个功能性组件,该组件的模板,样式,业务逻辑都采用就近维护的思想。从组件的复用性,后期可维护性的角度上来说,这样的理念都大大的提高了组件化的开发效率。vue 的单文件,既不是 js,也不是 html,也不是 css 文件,这样的文件如何被应用到页面上,这也就是下面将会说到的一个问题,vue 单文件是如何被处理成页面中可用的资源。

vue 单文件被处理的流程

vue 单文件配合 webpack 构建工具,在 webpack 中会交由 vue-loader 来处理。如下所示:

{
    test: /\.vue$/,
    loader: 'vue-loader',
}

项目中通过 import 或者 require 引入的 vue 单文件,都会经过 vue-loader 处理,vue-loader 在这个过程中会将模板按照 template、script、style 解析并将处理结果返回,三种不同类型的文件交由接下来的loader 进行处理。如果该单文件组件在父组件中的 components 声明,则 components 中对应的该项会被插入解析后 script 代码。这个过程从入口文件 main.js

ListDemo.vue

<template>
    <el-dialg>
        {{content}}
        <el-button>cancel</el-button>
        <el-button>ok</el-button>
    </el-dialg>
</template>

<script>
export default {
    name: &#39;Confirm&#39;,
    data() {
        return {
            visible: false,
            content: &#39;这是一个confirm dialog&#39;,
            callback: null,
        };
    },
    methods: {
        handleCancelClick() {
            this.callback(&#39;cancel&#39;);
        },
        handleOkClick() {
            this.callback(&#39;confirm&#39;);
        },
    },
};
</script>

このコードには、テンプレート、スクリプト、スタイルが含まれています。 3 つの機能については、ここでは詳しく説明しません。上記の構造は、vue 単一ファイルの基本的なファイル構造を示しています。その背後にある考え方は、単一のファイル コンポーネントが機能コンポーネントに対応し、コンポーネントのテンプレート、スタイル、ビジネス ロジックがすべて近くに維持されるというものです。コンポーネントの再利用性とその後のメンテナンス性の観点から、この概念によりコンポーネント開発の効率が大幅に向上しました。 vue の単一ファイルは js、html、css ファイルではありません。このようなファイルがページにどのように適用されるかについては、後で説明します。

vue単体ファイルの処理処理

vue単体ファイルはwebpackビルドツールと連携し、webpack内のvue-loaderで処理されます。以下に示すように:

import Vue from 'vue';
import Confirm from './confirm';

const ConfirmConstructor = Vue.extend(Confirm);

const confirm = (content) => {
    let confirmInstance = new ConfirmConstructor({
        data: {
            content,
        },
    });
    confirmInstance.vm = confirmInstance.$mount();
    confirmInstance.vm.visible = true;
    // 手动插入目的 dom
    document.body.appendChild(confirmInstance.vm.$el);
    confirmInstance.vm.callback = action => {
        return new Promise((resolve, reject) => {
          resolve(action);
        });
    };
    return confirmInstance.vm;
};
import または require によってプロジェクトに導入された Vue 単一ファイルは vue-loader によって処理され、vue-loader はテンプレート、スクリプト、スタイルに従ってテンプレートを解析し、処理結果を返します。 3 つの異なるタイプのファイルは、処理のために次のローダーに渡されます。単一ファイル コンポーネントが親コンポーネントのコンポーネント内で宣言されている場合、コンポーネント内の対応する項目が解析されたスクリプト コードに挿入されます。このプロセスはエントリ ファイル main.js から開始され、これに依存する関連するすべての単一ファイル コンポーネントがこのプロセスを順番に実行します。その後、ビジネス ロジックの依存関係に従ってすべてのコンポーネントがインスタンス化されます。このプロセスも開発でよく使用される方法です。 (vue-loader の処理プロセスの詳細については、ここで別の記事を参照してください)
  • 単一ファイルの一般的な姿勢

    テンプレート内のコンポーネント参照
  • 1. 使用法

    コンポーネントの分割とネスト:

特定の業務を機能や再利用性を考慮して小さなコンポーネントに分割する

コンテナコンポーネント(親コンポーネント)を介して小さな機能コンポーネント(サブコンポーネント)を統合する

運用テクニック:親コンポーネントにサブコンポーネントを導入し、登録するコンポーネントに追加し、対応するコンポーネント参照テンプレートをテンプレートに追加します

この方法は、単一ファイルの開発で使用される一般的な方法でもあり、コンポーネントのネストされた関係とビジネス ロジックで暗黙的に行われます。開発者は、コンポーネントの導入を考慮し、親コンポーネント ロジックにコンポーネントを登録し、親コンポーネントのテンプレートにコンポーネントをタグとして導入するだけで済みます。このプロセスで導入されるコンポーネントのインスタンス化のタイミングも、v-if ディレクティブを通じてビジネス ロジックで制御できます。

2. 適用可能なシナリオ

ほとんどのシナリオでは、この方法でコンポーネント開発を実行できます。このモデルの特徴は、コンポーネントを登録し、対応するコンポーネントタグをテンプレートに記述することでコンポーネントの導入が完了することです。
    テンプレート内のタグを介してコンポーネントを導入することは不可欠です
  • この機能は、一部のビジネス シナリオにおいて、開発者にある程度の反復作業をもたらす可能性があります。

    API スタイルの呼び出し
  • API スタイルの呼び出しは、サブコンポーネントのインスタンスを手動で作成することを指します。ビジネス ロジックにコンポーネントやテンプレート タグのプレースホルダーを導入する必要はなく、コンポーネントのインスタンス化と表示は公開された API で制御されます。

    1. 使用法

汎用モジュールは、汎用モジュールのオーダーファイルインスタンスのすべての関数ロジックを制御するための入口jsを提供します

この汎用モジュールを他のコンポーネントで使用する場合は、関数の下でjsを呼び出しますmodule と pass いくつかのパラメータを入力します🎜🎜🎜🎜操作方法: 🎜🎜confirm.vue🎜rrreee🎜confirm.js🎜
import Vue from 'vue';
import Confirm from './confirm';

const ConfirmConstructor = Vue.extend(Confirm);

const confirm = (content) => {
    let confirmInstance = new ConfirmConstructor({
        data: {
            content,
        },
    });
    confirmInstance.vm = confirmInstance.$mount();
    confirmInstance.vm.visible = true;
    // 手动插入目的 dom
    document.body.appendChild(confirmInstance.vm.$el);
    confirmInstance.vm.callback = action => {
        return new Promise((resolve, reject) => {
          resolve(action);
        });
    };
    return confirmInstance.vm;
};

如上所示,给出的是一个确认弹框的场景实现。确认弹框在很多用户交互中是一个必须的交互形式。很多组件库也采用上面这种 API 式的组件调用。调用方仅仅通过 api 的调用,就能实现该功能模块的引用。这样就避免了在 template 中通过标签占位的方式引用。实现原理就是手动接管单文件组件的实例化,通过 Vue.extend 获得该组件对应的 Vue 的子类,在暴露给调用的 api 中去实例化这个组件。这个过程中我们可能还要完成一些组件数据的注入,逻辑相关以及手动将该组件插入到目的 dom 中。手动的注入 dom 是该种方式的一个很大特点,通过在 api 中动态的注入目的 dom,避免我们在各个业务组件中调用该功能模块时重复性的在业务组件 template 中手写组件标签。

二、适用场景

  • 功能聚合度高,组件内逻辑简单,输入输出较为单一,比如一些功能较为独立的弹框

  • 一些特殊的自定义指令开发,比如在一些特殊场景的指令,可以复用一些单文件组件,通过在指令的钩子中实例化组件对应的 vue 子类,按照特定的逻辑插入到目的 dom 中(例如:element-ui的v-loading)

区别和共性

共性:通过实例化对应组件完成组件的功能逻辑

区别:实例化的时机和方式不同。模板式的引入通过组件注册和标签引入的方式来使用单文件组件。标签引入解决了子组件插入的 dom 位置问题,开发者无需关心。API 式的单文件组件使用,在 API 调用时手动实例化组件,需要手动控制插入到目的 dom。

总结

vue 的单文件组件提供了 vue 的组件化开发思路,其本质在导出 vue 的一些关键属性,比如生命周期函数,methods,computed, watch,props等。我们可以通过上述两种方式来使用单文件组件,目的在于工程内部尽量减少重复的模板代码,组件解耦。

相关推荐:

webpack入坑之旅(五)加载vue单文件组件_html/css_WEB-ITnose

jquery加载单文件vue组件方法分享

以上がvue の単一ファイルの詳細な紹介 (コード例)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
JavaScript in Action:実際の例とプロジェクトJavaScript in Action:実際の例とプロジェクトApr 19, 2025 am 12:13 AM

現実世界でのJavaScriptのアプリケーションには、フロントエンドとバックエンドの開発が含まれます。 1)DOM操作とイベント処理を含むTODOリストアプリケーションを構築して、フロントエンドアプリケーションを表示します。 2)node.jsを介してRestfulapiを構築し、バックエンドアプリケーションをデモンストレーションします。

JavaScriptとWeb:コア機能とユースケースJavaScriptとWeb:コア機能とユースケースApr 18, 2025 am 12:19 AM

Web開発におけるJavaScriptの主な用途には、クライアントの相互作用、フォーム検証、非同期通信が含まれます。 1)DOM操作による動的なコンテンツの更新とユーザーインタラクション。 2)ユーザーエクスペリエンスを改善するためにデータを提出する前に、クライアントの検証が実行されます。 3)サーバーとのリフレッシュレス通信は、AJAXテクノロジーを通じて達成されます。

JavaScriptエンジンの理解:実装の詳細JavaScriptエンジンの理解:実装の詳細Apr 17, 2025 am 12:05 AM

JavaScriptエンジンが内部的にどのように機能するかを理解することは、開発者にとってより効率的なコードの作成とパフォーマンスのボトルネックと最適化戦略の理解に役立つためです。 1)エンジンのワークフローには、3つの段階が含まれます。解析、コンパイル、実行。 2)実行プロセス中、エンジンはインラインキャッシュや非表示クラスなどの動的最適化を実行します。 3)ベストプラクティスには、グローバル変数の避け、ループの最適化、constとletsの使用、閉鎖の過度の使用の回避が含まれます。

Python vs. JavaScript:学習曲線と使いやすさPython vs. JavaScript:学習曲線と使いやすさApr 16, 2025 am 12:12 AM

Pythonは、スムーズな学習曲線と簡潔な構文を備えた初心者により適しています。 JavaScriptは、急な学習曲線と柔軟な構文を備えたフロントエンド開発に適しています。 1。Python構文は直感的で、データサイエンスやバックエンド開発に適しています。 2。JavaScriptは柔軟で、フロントエンドおよびサーバー側のプログラミングで広く使用されています。

Python vs. JavaScript:コミュニティ、ライブラリ、リソースPython vs. JavaScript:コミュニティ、ライブラリ、リソースApr 15, 2025 am 12:16 AM

PythonとJavaScriptには、コミュニティ、ライブラリ、リソースの観点から、独自の利点と短所があります。 1)Pythonコミュニティはフレンドリーで初心者に適していますが、フロントエンドの開発リソースはJavaScriptほど豊富ではありません。 2)Pythonはデータサイエンスおよび機械学習ライブラリで強力ですが、JavaScriptはフロントエンド開発ライブラリとフレームワークで優れています。 3)どちらも豊富な学習リソースを持っていますが、Pythonは公式文書から始めるのに適していますが、JavaScriptはMDNWebDocsにより優れています。選択は、プロジェクトのニーズと個人的な関心に基づいている必要があります。

C/CからJavaScriptへ:すべてがどのように機能するかC/CからJavaScriptへ:すべてがどのように機能するかApr 14, 2025 am 12:05 AM

C/CからJavaScriptへのシフトには、動的なタイピング、ゴミ収集、非同期プログラミングへの適応が必要です。 1)C/Cは、手動メモリ管理を必要とする静的に型付けられた言語であり、JavaScriptは動的に型付けされ、ごみ収集が自動的に処理されます。 2)C/Cはマシンコードにコンパイルする必要がありますが、JavaScriptは解釈言語です。 3)JavaScriptは、閉鎖、プロトタイプチェーン、約束などの概念を導入します。これにより、柔軟性と非同期プログラミング機能が向上します。

JavaScriptエンジン:実装の比較JavaScriptエンジン:実装の比較Apr 13, 2025 am 12:05 AM

さまざまなJavaScriptエンジンは、各エンジンの実装原則と最適化戦略が異なるため、JavaScriptコードを解析および実行するときに異なる効果をもたらします。 1。語彙分析:ソースコードを語彙ユニットに変換します。 2。文法分析:抽象的な構文ツリーを生成します。 3。最適化とコンパイル:JITコンパイラを介してマシンコードを生成します。 4。実行:マシンコードを実行します。 V8エンジンはインスタントコンピレーションと非表示クラスを通じて最適化され、Spidermonkeyはタイプ推論システムを使用して、同じコードで異なるパフォーマンスパフォーマンスをもたらします。

ブラウザを超えて:現実世界のJavaScriptブラウザを超えて:現実世界のJavaScriptApr 12, 2025 am 12:06 AM

現実世界におけるJavaScriptのアプリケーションには、サーバー側のプログラミング、モバイルアプリケーション開発、モノのインターネット制御が含まれます。 2。モバイルアプリケーションの開発は、ReactNativeを通じて実行され、クロスプラットフォームの展開をサポートします。 3.ハードウェアの相互作用に適したJohnny-Fiveライブラリを介したIoTデバイス制御に使用されます。

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衣類リムーバー

AI Hentai Generator

AI Hentai Generator

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

ホットツール

PhpStorm Mac バージョン

PhpStorm Mac バージョン

最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

EditPlus 中国語クラック版

EditPlus 中国語クラック版

サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

DVWA

DVWA

Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、