ホームページ ウェブフロントエンド jsチュートリアル Vue.js がブラウザーでテンプレートのレンダリングを実装する方法

Vue.js がブラウザーでテンプレートのレンダリングを実装する方法

Apr 21, 2018 am 11:05 AM
javascript

この記事では、Vue.js がブラウザーでテンプレート レンダリングを実装する方法を紹介します。これには、必要な友人が参照できるように共有します。ルールは記述されたテンプレートにロードされ、ブラウザーに表示される HTML.vue.js 出力は、フロントエンド (つまり、ブラウザー内) でテンプレート レンダリングされます。

フロントエンドとバックエンドのレンダリングの比較

バックエンド: サーバープロセスがデータベースからデータを取得した後、フロントエンドテンプレートエンジンを使用して、データを取得して HTML を生成し、それをネットワーク経由でユーザーのブラウザに送信し、ブラウザによって解析されて表示されるページになります。

フロントエンド: JS を使用して、ブラウザーでデータと HTML テンプレートを結合します。

フロントエンドレンダリングの利点は次のとおりです:

1. ビジネスの分離。バックエンドはデータインターフェイスを提供するだけでよく、フロントエンドは対応するバックエンド環境を展開する必要がありません。開発用のバックエンド データを削除すると、開発効率が向上します。

2. 計算量が転送され、本来バックエンドでのレンダリングが必要だったタスクがフロントエンドに転送され、サーバーへの負荷が軽減されます。


バックエンドレンダリングの利点

1. 検索エンジンに優しい。

2. ホームページの読み込み時間は短いですが、バックエンド レンダリングが読み込まれた直後に HTML が表示されますが、フロントエンド レンダリングは読み込み完了後もある程度の js レンダリング時間が必要です。


条件付きレンダリング

1.v-if/v-else

データ値に基づいてDOMノードとそれに含まれる子要素を出力するかどうかを決定します。

    <p v-if="yes">yes</p> //若当前vm实例中包含data.yes = true,则模板引擎将会编译这个DOM节点,输出<p>yes</p>
    <p v-if="yes">yes</p>
    <p v-else>no</p>    //注:v-else必须紧跟v-if使用。v-if绑定的元素包含子元素则不影响和v-else的使用。

    <p v-if="yes">
        <p v-if="inner">inner</p>
        <p v-else>not inner </p>
    </p>
    <p v-else>no</p>    new Vue({
        data: {
            yes: true,
            inner :false
        }
    })
ログイン後にコピー

出力結果は次のとおりです:

    <p>
        <p>not inner</p>
    </p>
ログイン後にコピー

2.v-show

    <p v-show="show">show</p>
    <p v-show="show">show</p>
    <p v-else>hidden</p>
ログイン後にコピー

注: v-show 要素は、バインディング値が true か false かに関係なく、DOM に表示され、維持されます。バインディング値を変更すると、要素の css 属性の表示のみが切り替わります。 v-if 要素の場合、ページにはこのラベルは表示されません。

3.v-if vs v-show

1. v-ifを切り替えると、DOMの動作レベルが変化します。 v-show はスタイルのみを変更しました。したがって、スイッチングの観点から見ると、v-show は v-if よりもパフォーマンスの消費が少なくなります。

2. v-if が切り替えられると、v-if のテンプレートにはデータ バインディングまたはサブコンポーネントも含まれる可能性があるため、vue.js には部分的なコンパイル/アンインストール プロセスが行われます。 v-show は引き続き通常の操作を実行し、css スタイルを display: none に設定します。

一般に、v-if はスイッチング コストが高く、v-show は初期レンダリング コストが高くなります。したがって、実際の使用シナリオに基づいて適切な命令を選択する必要があります。

リストレンダリング

v-for命令は主にリストレンダリングに使用され、受け取った配列に従ってv-forにバインドされたDOM要素と内部のサブ要素を繰り返しレンダリングし、配列を取得できます。エイリアスを設定することにより、内部データがノードにレンダリングされます。

    v-for遍历数组:    <ul>
        <li v-for="item in items">
            <h3>{{ item.title}}</h3>
            <p>{{item.description}}</p>
        </li>
    </ul>
    var vm = new Vue({
        el: &#39;#app&#39;,        data: {
            items: [
                {_id:1,title:"title-1",description:"description-1"},
                {_id:2,title:"title-2",description:"description-2"},
                {_id:3,title:"title-3",description:"description-3"},
                {_id:4,title:"title-4",description:"description-4"},            ]
        }
    });
ログイン後にコピー

//items はデータ内の属性名であり、item を使用して、現在の配列によって走査される各要素を取得できます。

v-for には組み込みの $index 変数があり、これを v-for 命令内で呼び出して、現在の配列要素のインデックスを出力できます。

さらに、インデックスに独自のエイリアスを作成することもできます:

    <li v-for="(index,item) in items">{{ index }} - {{ $index }} - {{ item.title }}</li>
ログイン後にコピー

注: vue.js はデータ内の配列のネイティブ メソッドをカプセル化するため、配列が変更されたときにビューの更新をトリガーできますが、ビューはトリガーできません。次の 2 つの状況でトリガーされます。 更新されました:
1. インデックスを介して配列要素を直接変更します。例: vm.items[0] = {title:'title-changed'};

2. "modify" の長さを直接変更することはできません。 array"、例: vm.items .length = 0


最初のケースでは、Vue.js は、データを変更しながらビューを更新する $set メソッドを提供します。これは次のように記述できます:

    vm.items.$set(0,{title:&#39;title-changed&#39;})  
 或者  vm.$set(&#39;items[0]&#39;,{title:&#39;title-also-changed&#39;});
ログイン後にコピー

リストから、配列内の一意の識別子 ID を決定します。トレースバイを通じて配列の一意の識別子を設定します。 Vue.js は、レンダリング プロセス中に元のオブジェクト スコープと DOM 要素を再利用しようとします。

    <li v-for="item in items" track-by="_id"></p>
ログイン後にコピー

v-for はオブジェクトをトラバースし、スコープ内で組み込み変数 $key にアクセスしたり、key 変数を (key, value) の形式でカスタマイズしたりできます。

    <li v-for="(key,value) in objectDemo">
        {{ key }} - {{ $key }} : {{ value }}    </li>
    var vm = new Vue({
        el:&#39;#app&#39;,        data: {
            objectDemo : {
                a:&#39;a-value&#39;,
                b:&#39;b-value&#39;,
                c:&#39;c-value&#39;
            }
        }
    })
ログイン後にコピー

v-for はループの数として使用される単一の整数を受け入れることができます:

    <li v-for="n in 5">{{ n }}</li>
ログイン後にコピー

template タグの使用法

コマンドを template タグに適用しますが、それは最終的なレンダリング結果には含まれません。

    <template v-if="yes">
        <p>this is first dom</p>
        <p>this is second dom</p>
    </template>
    //输出结果    <p>this is first dom</p>
    <p>this is second dom</p>template标签也支持使用v-for指令,用来渲染同级的多个兄弟元素。    <template v-for="item in items">
        <p>{{ item.name }}</p>
        <p>{{ item.desc }}</p>
    </template>
ログイン後にコピー


関連する推奨事項:

フロントエンドテンプレートとレンダリング

jquery jtemplates.js テンプレートレンダリングエンジンの詳細な使用法

テンプレート+の設計と実装データ分離レンダリング手法 レンダリングテンプレートを使用して

flaskを実装

WeChat アプレット - 複雑なデータ構造テンプレートのレンダリング

以上がVue.js がブラウザーでテンプレートのレンダリングを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホット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ヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

CSSを介してサイズ変更シンボルをカスタマイズし、背景色で均一にする方法は? CSSを介してサイズ変更シンボルをカスタマイズし、背景色で均一にする方法は? Apr 05, 2025 pm 02:30 PM

CSSでサイズ変更シンボルをカスタマイズする方法は、背景色で統一されています。毎日の開発では、調整など、ユーザーインターフェイスの詳細をカスタマイズする必要がある状況に遭遇することがよくあります...

Webページにローカルにインストールされている「Jingnan Mai Round Body」を正しく表示するにはどうすればよいですか? Webページにローカルにインストールされている「Jingnan Mai Round Body」を正しく表示するにはどうすればよいですか? Apr 05, 2025 pm 10:33 PM

最近、Webページにローカルにインストールされたフォントファイルを使用して、インターネットから無料のフォントをダウンロードし、システムに正常にインストールしました。今...

カスタムスタイルのシートは、SafariのローカルWebページでバイドゥページでは効果を発揮できないのはなぜですか? カスタムスタイルのシートは、SafariのローカルWebページでバイドゥページでは効果を発揮できないのはなぜですか? Apr 05, 2025 pm 05:15 PM

Safariでカスタムスタイルシートを使用することについてのディスカッション今日は、Safariブラウザ向けのカスタムスタイルシートのアプリケーションに関する質問について説明します。フロントエンド初心者...

ネガティブマージンが場合によっては効果がないのはなぜですか?この問題を解決する方法は? ネガティブマージンが場合によっては効果がないのはなぜですか?この問題を解決する方法は? Apr 05, 2025 pm 10:18 PM

なぜマイナスマージンが場合によっては有効にならないのですか?プログラミング中、CSSの負のマージン(負...

Webページにローカルにインストールされたフォントファイルを使用する方法は? Webページにローカルにインストールされたフォントファイルを使用する方法は? Apr 05, 2025 pm 10:57 PM

Webページにローカルにインストールされたフォントファイルを使用する方法Webページ開発でこの状況に遭遇しましたか:コンピューターにフォントをインストールしました...

フレックスレイアウトの下のテキストは省略されていますが、コンテナは開かれていますか?それを解決する方法は? フレックスレイアウトの下のテキストは省略されていますが、コンテナは開かれていますか?それを解決する方法は? Apr 05, 2025 pm 11:00 PM

フレックスレイアウトとソリューションの下でのテキストの過度の省略によるコンテナの開口部の問題が使用されます...

JavaScriptまたはCSSを介してブラウザ印刷設定でページの上部と終了を制御する方法は? JavaScriptまたはCSSを介してブラウザ印刷設定でページの上部と終了を制御する方法は? Apr 05, 2025 pm 10:39 PM

JavaScriptまたはCSSを使用して、ブラウザの印刷設定のページの上部と端を制御する方法。ブラウザの印刷設定には、ディスプレイが...

CSSとFlexBoxを使用して、さまざまな画面サイズで画像とテキストのレスポンシブレイアウトを実装する方法は? CSSとFlexBoxを使用して、さまざまな画面サイズで画像とテキストのレスポンシブレイアウトを実装する方法は? Apr 05, 2025 pm 06:06 PM

CSSを使用してレスポンシブレイアウトを実装して、Webデザインのさまざまな画面サイズの下でレイアウトの変更を実装する場合、CSS ...

See all articles