Vueコンポーネント化開発の汎用型ポップアップフレームの実現
11189 ワード
この文章は主にコンポーネント開発についての理解を共有して、入門したばかりの仲間に回り道をしないようにして、開発効率を高めます。
多くの入門したばかりの仲間が、よく重複したコードを書いています。これらのコードは一般的に大同小異です。この場合、どうやって開発と学習をより効率的にするか、コンポーネント化の思想が重要です。ここでは簡単なポップアップフレームを設計することによって、子供たちにコンポーネント化の応用を共有します。
コンポーネント&コンポーネント化
コンポーネント化は、いくつかの多重化可能な機能を実装する標準化動作である。コンポーネントは、一般的に、独自の内部UI要素、スタイル、およびJS論理コードを含んでおり、アプリケーションのどこにでも簡単に埋め込むことができます。コンポーネントの内部は、他のコンポーネントを使用して、より複雑なコンポーネントを構成することができます。
実際の開発においては、重複コードの作成を避け、よりコアな部分に力を入れる必要があるので、これらの重複コードを抽出して、共通のコンポーネントにパッケージ化し、開発効率を向上させる必要があります。
基本構造
まず、ポップアップボックスの基本的な構造です。
ここで定義しました slaotのname属性 bodyという名のスロットがマッチします。 v-slaot:bodyの内容。
注意してください。親のコンポーネントで呼び出しは必要です。 小包 要素のすべての内容は対応するスロットに導入されます。
ポップアップボックスにスタイルを追加します。
まだあまり綺麗ではないですが、もう一つのポップアップ枠の雛形です。あげませんでした。 aマークのスタイルは、後ろにあるためです。
SCSS関数
振り返ると上の cssコードは、ここで4回固定位置決めのコードを繰り返し書きました。そしてプロジェクトの推進によって、もっと多くの類似のコードがあるはずです。これらの部分を抜き出してパッケージ化したらどうですか? scssはこの機能を提供して、 cssは関数としてカプセル化され、ここの関数は直接関数体に戻ります。私たちは同じような場合には直接多重化できる。
はい、 astesディレクトリの下で新規作成 scssフォルダを作成し、中に新規作成します。 mixin.scssは、中に新しくできました。 position関数、コードは以下の通りです。
@includeで使う scss関数: @include position(fixed)括弧の中のはパラメータです。
ボタンについて
どのサイトにもたくさんのボタンがありますが、同じサイトのボタンのスタイルはほとんど同じで、大きさが違っています。だから一人でいてもいいです。 scssファイルの下で新規作成 button.scssそして アプリ.vueではこのファイルを導入していますが、後には特別なデザインの他にボタンにスタイルを定義する必要がなく、メンテナンスにも便利です。ここで私にくれたのは buttonファイルは参考にしてもいいです。
現在のこのイジェクトボックスはまだ固定された構造にすぎず、他のところで多重化できないので、一部の処理が必要です。すべての可変部分を見出し、ボタン、内容など抽出します。スロットがあるので、内容は気にせず、タイトルとボタンに注目したいです。タイトルはヒント、警告などがあります。ボタンは確定、キャンセルの一つまたは二つがあります。これらの情報は全部親の部品から伝わってきます。 props受信
はい、 propsに次のコードを追加し、いくつかの属性にデフォルト値を指定します。
はい、 Home.vueはこのコンポーネントを導入して呼び出します。
最終効果は以下の通りです
実現したら、ちょっとポップアップした時のぎこちない感じがします。大丈夫です。アニメを追加してください。css 3にあります。 transformと transionはアニメーション効果を実現できますが、ここで使っています。 vue内蔵モジュールは、上から弾かせる効果があるようにします。
トランジストモジュール
transionコンポーネントは、要素またはコンポーネントに遷移効果を加えることができ、そのパッケージの内容に遷移効果を適用するだけで、DOM要素を追加的にレンダリングすることなく、検査可能なコンポーネント階層にも現れない。いろいろな方法で移行できます。ここでクラスの方式を適用して移行します。
この図は Vue公式図では、簡単に言えば、v-enterはアニメーション開始の状態であり、v-enter-activeは移行発効時の状態に入ります。v-enter-toは移行の終了状態です。leaveは同じです。具体的な詳細はみんなで行ってもいいです。 https://cn.vuejs.org/v2/guide/transitions.html参照。
指定されたname属性がない場合は、移行のクラス名はデフォルトでvをプレフィックスとし、ここでtransionにnameを指定します。
sladeを使ってmodalコンポーネントを包んでください。
これで私たちのポップアップフレームが完成します。
自分のニーズに合わせて適切な調整をして、自分のプロジェクトに適したポップアップフレームを開発することもできます。
最後に
実際の開発において、コンポーネント化は特に重要であり、より高い品質のコードを書くのを助けてくれます。コードをより維持しやすくし、早期にコンポーネント化の思想を確立することもできます。コードを書くのに非常に役立ちます。
https://github.com/anpeier/shop-onlineを添付します
ここで、Vueコンポーネント化開発の汎用型ポップアップフレームの実現に関する記事を紹介します。Vueポップアップフレームの内容については、以前の文章を検索したり、下記の関連記事を引き続き閲覧したりしてください。これからもよろしくお願いします。
多くの入門したばかりの仲間が、よく重複したコードを書いています。これらのコードは一般的に大同小異です。この場合、どうやって開発と学習をより効率的にするか、コンポーネント化の思想が重要です。ここでは簡単なポップアップフレームを設計することによって、子供たちにコンポーネント化の応用を共有します。
コンポーネント&コンポーネント化
コンポーネント化は、いくつかの多重化可能な機能を実装する標準化動作である。コンポーネントは、一般的に、独自の内部UI要素、スタイル、およびJS論理コードを含んでおり、アプリケーションのどこにでも簡単に埋め込むことができます。コンポーネントの内部は、他のコンポーネントを使用して、より複雑なコンポーネントを構成することができます。
実際の開発においては、重複コードの作成を避け、よりコアな部分に力を入れる必要があるので、これらの重複コードを抽出して、共通のコンポーネントにパッケージ化し、開発効率を向上させる必要があります。
基本構造
まず、ポップアップボックスの基本的な構造です。
<div class="modal">
<div class="mask"></div>
<div class="modal-dialog">
<div class="modal-header">
<span> </span>
<a href="javascript:;" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" class="icon-close"></a>
</div>
<div class="modal-body">
<slot name="body"></slot>
</div>
<div class="modal-footer">
<a href="javascript:;" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" class="btn"> </a>
<a href="javascript:;" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" class="btn btn-default"> </a>
</div>
</div>
</div>
</div>
基本構造は簡単です。ちょっと注意してください。 slaotスロットには、name属性が提供されていない場合、defaultという名前が隠されています。そして、親のセットに指定されていない場合は、 slaotの v-slot属性であれば、内容はdefaultスロットに伝えられます。ここで定義しました slaotのname属性 bodyという名のスロットがマッチします。 v-slaot:bodyの内容。
注意してください。親のコンポーネントで呼び出しは必要です。 小包 要素のすべての内容は対応するスロットに導入されます。
ポップアップボックスにスタイルを追加します。
.modal {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
.mask {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: #000000;
opacity: 0.5;
}
.modal-dialog {
position: absolute;
top: 40%;
left: 50%;
width: 560px;
height: auto;
background-color: #ffffff;
transform: translate(-50%, -50%);
.modal-header {
height: 60px;
background-color: #F5F5F5;
padding: 0 25px;
line-height: 60px;
font-size: 16px;
.icon-close {
position: absolute;
top: 23px;
right: 25px;
width: 14px;
height: 14px;
background: url("/static/img/icon-close.png") no-repeat center;
background-size: contain;
}
}
.modal-body {
padding: 42px 40px 54px;
font-size: 14px;
}
.modal-footer {
height: 82px;
line-height: 82px;
text-align: center;
background-color: #F5F5F5;
}
}
}
ここで使っているのは scss、使う時はインストールを忘れないでください。 node-sassと sass-loader、今私達のページはこの様子です。まだあまり綺麗ではないですが、もう一つのポップアップ枠の雛形です。あげませんでした。 aマークのスタイルは、後ろにあるためです。
SCSS関数
振り返ると上の cssコードは、ここで4回固定位置決めのコードを繰り返し書きました。そしてプロジェクトの推進によって、もっと多くの類似のコードがあるはずです。これらの部分を抜き出してパッケージ化したらどうですか? scssはこの機能を提供して、 cssは関数としてカプセル化され、ここの関数は直接関数体に戻ります。私たちは同じような場合には直接多重化できる。
はい、 astesディレクトリの下で新規作成 scssフォルダを作成し、中に新規作成します。 mixin.scssは、中に新しくできました。 position関数、コードは以下の通りです。
@mixin position($pos: absolute, $top: 0, $left: 0, $w: 100%, $h: 100%) {
position: $pos;
top: $top;
left: $left;
width: $w;
height: $h;
}
引き続いて導入します mixin.scss、使います position関数を元のコードに置き換える@includeで使う scss関数: @include position(fixed)括弧の中のはパラメータです。
ボタンについて
どのサイトにもたくさんのボタンがありますが、同じサイトのボタンのスタイルはほとんど同じで、大きさが違っています。だから一人でいてもいいです。 scssファイルの下で新規作成 button.scssそして アプリ.vueではこのファイルを導入していますが、後には特別なデザインの他にボタンにスタイルを定義する必要がなく、メンテナンスにも便利です。ここで私にくれたのは buttonファイルは参考にしてもいいです。
.btn {
display: inline-block;
width: 110px;
line-height: 30px;
text-align: center;
background-color: #FF6600;
color: #ffffff;
border: none;
cursor: pointer;
}
.btn-default {
background-color: #b0b0b0;
color: #d7d7d7;
}
.btn-large {
width: 202px;
height: 50px;
line-height: 50px;
font-size: 18px;
}
.btn-huge {
width: 300px;
height: 54px;
line-height: 54px;
font-size: 16px;
}
.btn-group {
.btn {
margin-right: 20px;
&:last-child {
margin-right: 0;
}
}
}
多重化のために現在のこのイジェクトボックスはまだ固定された構造にすぎず、他のところで多重化できないので、一部の処理が必要です。すべての可変部分を見出し、ボタン、内容など抽出します。スロットがあるので、内容は気にせず、タイトルとボタンに注目したいです。タイトルはヒント、警告などがあります。ボタンは確定、キャンセルの一つまたは二つがあります。これらの情報は全部親の部品から伝わってきます。 props受信
はい、 propsに次のコードを追加し、いくつかの属性にデフォルト値を指定します。
props: {
//
title: String,
// : 1: 2: 3:
btnType: String,
//
sureText: {
type: String,
default: " "
},
cancleText: {
type: String,
default: " "
},
showModal: Boolean
}
追加した後、コードを書き換えます。
<div class="modal" v-show="showModal">
<div class="mask"></div>
<div class="modal-dialog">
<div class="modal-header">
<span>{{title}}</span>
<a href="javascript:;" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" class="icon-close" @click="$emit('cancle')"></a>
</div>
<div class="modal-body">
<slot name="body"></slot>
</div>
<div class="modal-footer">
<a href="javascript:;" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" class="btn" v-if="btnType==1"@click="$emit('submit')"{{sureText}}</a>
<a href="javascript:;" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" class="btn" v-if="btnType==2"@click="$emit('cancle')">{{cancleText}}</a>
<div class="btn-group" v-if="btnType==3">
<a href="javascript:;" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" class="btn" @click="$emit('submit')">{{sureText}}</a>
<a href="javascript:;" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" class="btn btn-default" @click="$emit('submit')">{{cancleText}}</a>
</div>
</div>
</div>
</div>
親コンポーネントから渡されたパラメータにより、コードの再使用が可能になります。 $emitは外に向かってカスタマイズイベントを投げて、父のコンポーネントで自分の業務ロジックを実現します。はい、 Home.vueはこのコンポーネントを導入して呼び出します。
<modal
title=" "
sureText=" "
btnType="1"
:showModal="showModal"
@submit="go"
@cancle="showModal=false"
>
<template v-slot:body>
<p> </p>
</template>
</modal>
ここの @submitと @cancleは私たちがコンポーネントの中でカスタマイズしたイベントです。最終効果は以下の通りです
実現したら、ちょっとポップアップした時のぎこちない感じがします。大丈夫です。アニメを追加してください。css 3にあります。 transformと transionはアニメーション効果を実現できますが、ここで使っています。 vue内蔵モジュール
トランジストモジュール
transionコンポーネントは、要素またはコンポーネントに遷移効果を加えることができ、そのパッケージの内容に遷移効果を適用するだけで、DOM要素を追加的にレンダリングすることなく、検査可能なコンポーネント階層にも現れない。いろいろな方法で移行できます。ここでクラスの方式を適用して移行します。
この図は Vue公式図では、簡単に言えば、v-enterはアニメーション開始の状態であり、v-enter-activeは移行発効時の状態に入ります。v-enter-toは移行の終了状態です。leaveは同じです。具体的な詳細はみんなで行ってもいいです。 https://cn.vuejs.org/v2/guide/transitions.html参照。
指定されたname属性がない場合は、移行のクラス名はデフォルトでvをプレフィックスとし、ここでtransionにnameを指定します。
sladeを使ってmodalコンポーネントを包んでください。
<transition name="slide">
<div class="modal" v-show="showModal">
...
...
</div>
</transition>
styleコードにmodalの後ろに追加します。
&.slide-enter-active {
top: 0;
}
&.slide-leave-active {
top: -100%;
}
&.slide-enter {
top: -100%;
}
そしてmodalに遷移が必要な属性を指定します。
transition: top 0.5s;
これを追加したら、枠をイジェクトしたら、すべり落ちるアニメーションがあります。これで私たちのポップアップフレームが完成します。
自分のニーズに合わせて適切な調整をして、自分のプロジェクトに適したポップアップフレームを開発することもできます。
最後に
実際の開発において、コンポーネント化は特に重要であり、より高い品質のコードを書くのを助けてくれます。コードをより維持しやすくし、早期にコンポーネント化の思想を確立することもできます。コードを書くのに非常に役立ちます。
https://github.com/anpeier/shop-onlineを添付します
ここで、Vueコンポーネント化開発の汎用型ポップアップフレームの実現に関する記事を紹介します。Vueポップアップフレームの内容については、以前の文章を検索したり、下記の関連記事を引き続き閲覧したりしてください。これからもよろしくお願いします。