スケルトンスクリーンの使用
Vueアーキテクチャスケルトンスクリーンアイデアの概要
抽象コンポーネントの定義抽象コンポーネントとは何ですか? レンダリング中にスキップされ、実行時操作のみを実行するコンポーネントです。 エクスポートデフォルト{ 名前: 'GmSkeleton'、 abstract: true // 抽象コンポーネントのプロパティ} スロットを取得し、操作スケルトン画面を初期化するレンダリング(h) { const スロット = this.$slots.default || [h('')] this.$nextTick().then(() => { this.handlerPrefix(スロット、this.showSpin ? this.addSkeletPrefix : this.removeSkeletPrefix) }) スロットの長さが1より大きい場合、h('div', { 静的クラス: this.showSpin ? 'g-spinner' : '' }, スロット) : スロット } ここでは、handlerPrefix が実際の DOM を取得する必要があるため、スロット処理メソッドを nextTick に配置します。NextTick は、ソートされた更新キュー内のすべてのメソッドを実行するために使用されます。レンダリングを実行する前に、GMSkeleton コンポーネントの renderWatcher が更新キューに収集されています。そのため、nextTick CallBack 関数は、レンダリング後に対応するスロット内のすべての実際の DOM を取得できます。nextTick の原理がわからない場合は、nextTick についてわからないことを参照してください。 サイクルスロット操作クラス名handlerComponent(スロット、handler/* addSkeletPrefix | removeSkeletPrefix */、init) { const originchildren = (((slot.componentInstance || {})._vnode || {}).componentOptions || {}).children const compchildren = ((slot.componentInstance || {})._vnode || {}).children !init && ハンドラ(スロット) if (compchildren) this.handlerPrefix(compchildren, handler, false) if (originchildren) this.handlerPrefix(originchildren, handler, false) }, handlerPrefix(スロット、ハンドラー、init = true) { スロット.forEach(スロット => { var children = slot.children || (slot.componentOptions || {}).children || ((slot.componentInstance || {})._vnode || {}).children if (スロットデータ) { スロットコンポーネントオプションの場合 !init && ハンドラ(スロット) } そうでない場合 (!this.$hoc_utils.getAbstractComponent(スロット)) { ;(関数(スロット) { const handlerComponent = this.handlerComponent.bind(this, slot, handler, init) const 挿入 = (slot.data.hook || {}).挿入 ;(slot.data.hook || {}).insert = () => { // 関数のリファクタリング、元のコンポーネントフックを変更し、挿入が 1 回だけ実行されるようにします insert(slot) ハンドラコンポーネント() } ;(slot.data.hook || {}).postpatch = handlerComponent }).call(this, スロット) } } (スロット&& slot.elm && slot.elm.nodeType === 3)の場合{ if (this.showSpin) { slot.memorizedtextContent = slot.elm.textContent slot.elm.textContent = '' } それ以外 { slot.elm.textContent = slot.memorizedtextContent || slot.elm.textContent || slot.text } } children && this.handlerPrefix(children, handler, false) }) }, ステップバイステップの分析:
vnodeを操作するための静的クラス名addSkeletPrefix(スロット) { const rootVnode = slot.componentOptions ? (slot.componentInstance || {})._vnode || {} : スロット; (ルートノード.elm)の場合{ rootVnode.elm.classList.add(this.skeletPrefix) } それ以外 { ;(rootVnode.data || {}).staticClass += ` ${this.skeletPrefix}` } }, スケルトンプレフィックスを削除します(スロット) { const rootVnode = slot.componentOptions ? (slot.componentInstance || {})._vnode || {} : スロット; (ルートノード.elm)の場合{ rootVnode.elm.classList && rootVnode.elm.classList.remove(this.skeletPrefix) } そうでない場合 (rootVnode.data.staticClass) { rootVnode.data.staticClass = rootVnode.data.staticClass.replace(` ${this.skeletPrefix}`, '') } } addSkeletePrefixはgm-skeletonクラス名を追加するために使用され、removeSkeletonPrefixはgm-skeletonクラス名を削除するために使用されます。 使い方'vue' から Vue をインポートします 'path/to/GMSkeleton' から GMSkeleton をインポートします Vue.use(GMSkeleton) <gm-スケルトン> <コンポーネント /> <div></div> <div><span>フロントエンド マーティン</span></div> </gm-スケルトン> 値の受け渡し
効果は以下のとおりです特定のスタイルは、開発者が書いたスタイルに従って生成され、上記のようにgm-skeletonでラップされます。以下は簡単な例です。 完全な住所Vue スケルトン スクリーンを実装するための 80 行のコード 以上がvueでスケルトン画面を実装した例の詳細です。vueでスケルトン画面を実装する方法の詳細については、123WORDPRESS.COMの他の関連記事にも注目してください! 以下もご興味があるかもしれません:
|
<<: MySQL 5.7.20 の解凍バージョンをインストールするための詳細な手順 (2 つの方法)
>>: Linux で Scala 環境を構築し、簡単な Scala プログラムを書く
ナビゲーションなどは日々の開発でよく使うので、記録として記事を書きます。ナビゲーションは終了/開始位...
1. SpringBoootプロジェクトを作成し、jarパッケージにパッケージ化する2. Linux...
さっそく、コードを直接投稿します。具体的なコードは次のとおりです。 <!DOCTYPE htm...
このノートでは、 MySQL の B+Tree インデックスとは何ですか?クラスター化インデックスは...
Unix/Linux サービスsystemd サービス操作プロセス1. JDKがインストールされたC...
環境: 10.12 の新機能Python 3.6 MySQL 5.7.25 の場合ジャンゴ 2.2....
最近ディープラーニングを学ぶためにUbuntu+Python 3.6バージョンを使う必要があるため、...
ネットで検索してみたところ、多くの面接でモバイル適応方法について質問されることが分かりました。最近い...
一般的なフォーム プロンプトは常にフォームのスペースを占有し、フォームが長くなったり広くなったりして...
まさか、2021年になってもTypeScriptについて聞いたことがない人がいるなんて?プロジェクト...
以下の質問はすべて InnoDB ストレージ エンジンに基づいています。 1. 最も大きな ID を...
目次1. 属性を追加する2. 複数のオブジェクトを結合する3. オブジェクトのプロパティを削除する4...
jsvc の紹介実稼働環境では、Tomcat はデーモン モードで実行する必要があります。Tomc...
目次1. 機能紹介2. キーコード2.1 ホームページの機能2.2 製品情報を追加する2.3 データ...
目次1. コンストラクタの定義と呼び出し2. 新しいキーワードの目的3. コンストラクタの問題: メ...