Vue ドキュメントの一部の内容については、この記事で主に Vue ドキュメントの見落とされやすい部分の詳細な分析を紹介します。必要な方は参考にしてください。 Vue ドキュメント 学習できない可能性のある内容の一部を簡単にまとめました。経験者向けの内容なので、初心者にはあまり適していません。また、いくつかの欠点があるかもしれません。
コードを保存するミックスインミックスインの概念: データ変数/ライフサイクルフック/パブリックメソッドを含むコンポーネントレベルの再利用可能なロジック。これにより、冗長なロジックを繰り返し記述することなく混合コンポーネントで直接使用できます(類似継承へ)
使い方:
あるパブリックフォルダーpub配下にmixinフォルダーを作成し、その下にmixinTest.jsを作成します
const mixinTest = { created() { console.log(`components ${this.name} created`) }, methods: { hello() { console.log('mixin method hello') } } } export default mixinTest
コンポーネント内で先ほどのパブリックmixinファイルを参照して使用します
import mixinTest from '../pub/mixin/mixinTest.js' export default { data() { return { name: 'hello' } }, mixins: [mixinTest], methods: { useMixin() { this.hello() } } }
ps: Vue.mixin() メソッドを使用すると、後で作成されるすべての Vue サンプルに影響を与えるため、使用には注意してください。
ミックスインのいくつかの機能に注意してください:
- 混合されたデータ変数は浅いマージであり、競合が発生した場合、コンポーネント内のデータが優先されます (オブジェクト内のカスタム変数)
- のロジック。混合ライフサイクル関数は、コンポーネントで定義されたライフサイクル関数ロジックとマージし、最初に実行 (作成/マウント/破棄) します
- オブジェクトとして値が混合されたオプションは、競合後にオブジェクトに混合されます。 、コンポーネント内のキー名も優先されます (データ/メソッド/コンポーネント/ディレクティブ)
スロットの概念の紹介: 記述における Vue と React の違いは内部コンポーネントの構成にありますコンポーネントとサブコンポーネントの要素にアクセスして表示するための API は、代わりにスロットです
使用シナリオ定義:
- カスタムサブコンポーネントにはネストされたHTMLやその他のカスタムタグコンポーネントがあります
- このカスタムサブコンポーネントは親コンポーネントに記述されており、ネストされたものも親コンポーネントに配置されます
-
。サブコンポーネントのテンプレートで
タグを使用することで実現されます。親コンポーネントに記述されたネストされたタグの効果は、基本的に、親コンポーネントのコンテンツを子コンポーネントに配置することです。複数のタグも一緒に挿入されます - スロット機能の 2 つの高度なポイント:
<template> <p id="app"> <self-component> <!--self-component表示自定义的组件--> <span>12345</span> <!--父组件里的嵌套标签--> </self-component> </p> </template> <script> export default { components: [selfComponent] } </script> <!--self-component的组件模板--> <template> <p> <button><slot></slot></button> </p> </template> <script> export default { // 只有子组件的模板里面有slot标签,才能取到写在自定义组件里面的标签的渲染引用 } </script>
-
- タグが挿入される場所を指定するスロットの name 属性、そしてそれはドキュメント内の名前付きスロットです (これは公式ドキュメントにわかりやすく説明されています)
<!-- 父组件模板 --> <child :items="items"> <!-- 作用域插槽也可以是具名的 --> <li slot="item" slot-scope="props" class="my-fancy-item">{{ props.text }}</li> </child> <!-- 子组件模板 --> <ul> <slot name="item" v-for="item in items" :text="item.text"> <!-- 这里写当父组件引用子组件但没写内部内容时展示的东东 --> </slot> </ul>
スロットの内容を親コンポーネント内の子コンポーネントには、slot 属性 (
123
) を指定します- 親コンポーネントの内容は、slot== に対応する名前を正しく入力してください位置
- スロット属性が指定されていない場合、デフォルトで匿名スロット位置に配置されます
- 動的コンポーネント
- 動的コンポーネントのこの機能は、人々が作成した多くの Vue プロジェクトでは使用されていません
動的コンポーネントの適用性: 一部のコンポーネントの切り替えにはルーティングが含まれません。
- 使用されるメソッド (ドキュメントを参照):
<keep-alive> <component v-bind:is="currentView"> <!-- 组件在 vm.currentview (对应组件名称)变化时改变! --> <!-- 非活动组件将被缓存!可以保留它的状态或避免重新渲染 --> </component> </keep-alive>
- 注:
- 再レンダリングを回避する別の方法は、次のように属性 v-once をタグに追加することです。レンダリングの繰り返しを避けるために、大量の静的コンテンツをキャッシュするために使用されます。
ps:
动画与过渡
其实很多前端工程师第一次用Vue的动画和过渡都是通过库组件来做到的,所以对这块没怎么深挖,各种过渡特效和按钮动画就跑起来了,现在就看下文档,补补课
前端实现动画的基本方法分为三种种:css3的过渡和keyframe/javascript操纵dom/使用webgl或者canvas来独立实现,其中第三种是作为展示动画,与交互结合较少,而Vue作为一个框架,其支持动画基是从前两种入手的,从官方文档提到的四种支持就可以看出这一点。不过官方文档是从DOM过渡和状态过渡两个方面来讲解,前者是DOM的消失和出现的动画等属性的变化,后者是页面上某些值的变化。
DOM属性的改变
若是单个元素/组件的显隐,在组件外面包裹一层
CSS过渡:
vue提供了六个样式后缀,本质是在dom过渡的过程中动态地添加和删除对应的className。(-[enter|leave]-?[active|to]?)
如果用css库来辅助开发,可以在transiton这个标签上定义自定义过渡类名,也是六个属性。([enter|leave]-?[active|to]?-class)
常见的一种效果是元素首次渲染的动画,如懒加载图片飞入,这个时候要在transiton标签上加上appear,另有三个属性可指定(appear-?[to|active]?-class)
<!-- 每种CSS动画库对应的class命名规则可能不同,所以根据不同库要自己写,以animate.css为例 --> <transition name="custom-classes-transition" enter-active-class="animated tada" leave-active-class="animated bounceOutRight" :duration="{ enter: 500, leave: 800 }" >...</transition> <!-- duration属性可以传一个对象,定制进入和移出的持续时间-->
JS过渡:
因为现在很多动画库需要工程师调用库提供的函数,把dom元素传入进行处理,这个时候需要这种方式
通过在transiton这个标签上添加监听事件,共8个([before|after]?-?[enter|leave]-?[cancelled]?)
监听事件的回调函数的第一个参数都是el,为过渡的dom元素,在enter和leave这两个还会传入done作为第二个参数
元素首次渲染的动画,可以指定的监听事件有4个([before|after]?-?appear和appear-cancelled)
<template> <transition v-bind:css="false" v-on:before-enter="beforeEnter" v-on:enter="enter" v-on:leave="leave" v-on:leave-cancelled="leaveCancelled"> <!-- 对于仅使用 JavaScript 过渡的元素添加 v-bind:css="false",Vue 会跳过 CSS 的检测 --> </transition> </template> <script> methods: { // 以Velocity库为例 beforeEnter: function (el) {/*...*/}, // 此回调函数是可选项的设置 enter: function (el, done) { // Velocity(el, { opacity: 1, fontSize: '1.4em' }, { duration: 300 }) done() //回调函数 done 是必须的。否则,它们会被同步调用。 }, leave: function (el, done) { // Velocity(el, { translateX: '15px', rotateZ: '50deg' }, { duration: 600 }) done() }, leaveCancelled: function (el) {/*...*/} } </script>
多元素过渡其实就是一句话:照常使用v-if/v-else的同时对同一种标签加上key来标识
Vue对于这种多元素动画有队列上的处理,这就是transiton这个标签上的mode属性,通过指定(in-out|out-in)模式,实现消失和出现动画的队列效果,让动画更加自然。
<transition name="fade" mode="out-in"> <!-- ... the buttons ... --> </transition>
多组件过渡也是一句话:用上一节提到的动态组件,即可完成。
针对列表过渡,其本质仍是多个元素的同时过渡,不过列表大部分是通过数组动态渲染的,因此有独特的地方,不过整体的动画思路不变。具体有以下几点
使用transitoin-group这个组件,其需要渲染为一个真实元素,可以通过tag这个属性来指定。
列表的每个元素需要提供key属性
使用CSS过渡的话,要考虑到列表内容变化过程中,存在相关元素的定位改变,如果要让定位是平滑过渡的动画,要另外一个v-move属性。 这个属性是通过设置一个css类的样式,来将创建元素在定位变化时的过渡,Vue内部是通过FLIP实现了一个动画队列,只要注意一点就是过渡元素不能设置为display:inline,这里需要文档上的代码做一个简短的demo:(其实通过在li上设置过渡transition属性也可以实现v-move的效果)
<template> <button v-on:click="shuffle">Shuffle</button> <transition-group name="flip-list" tag="ul"> <li v-for="item in items" v-bind:key="item">{{ item }}</li> </transition-group> </template> <script> import _ from 'lodash'; export default { data() { return { items: [1,2,3,4,5,6,7,8,9] } }, methods: { shuffle: function () { this.items = _.shuffle(this.items) } } } </script> <style lang="css"> .flip-list-move { transition: transform 1s; } </style>
数值和属性动态变化
这一部分的动画主要是针对数据元素本身的特效,比如数字的增减,颜色的过渡过程控制,svg动画的实现等,其本质都是数字/文本的变化。 我自己总结就是:通过利用Vue的响应式系统,把数字的变化通过外部库把DOM上对应数值的变化做出连续的效果,如1->100是个数字递增的连续过程,黑色->红色的过程。官方文档主要是用几个示例代码来说明,其本质步骤如下:
在页面上通过input的双向绑定修改某一变量a,还有一个处理dom上的过渡效果的变量b
这个数据被watcher绑定(watch对象中某个属性是这个变量a),触发逻辑
在watcher里面的逻辑就是通过外部过渡库,指定初始值b和最终值a,是把b的值最后改为a
DOM上绑定的变量就是b,如果某些复杂情况可能是基于b的计算属性,从而把b的变化过程展现出来
上記のアイデアに従って、ユニットレベルのアニメーション効果が完成します。これと同様のプロセスは実際には非常に一般的な要件であるため、このプロセスをコンポーネントにカプセル化し、遷移する値のみをエントリとして公開する必要があります。 、この値が変更されるたびに、アニメーションのトランジション効果が発生します。コンポーネントのカプセル化は、上記の 4 つの手順に基づいて、実装されたライフサイクルで指定された初期値を追加する必要があります。同時に、元の 2 つの値 a/b はコンポーネント内で 1 つの値として使用され、区別できます。監視オブジェクトの newValue と oldValue によって。 最後の SVG についても、その本質はデジタル移行ですが、より多くの状態変数と長いコードが含まれます。ただし、純粋なフロントエンド ページの需要はまだそれほど多くありませんが、趣味として少しいじってみるのも良いでしょう。小さなデモですが、デザイナーの参加が必ず必要です。そうしないと、パラメーターを調整するのが難しくなります。
上記は私があなたのためにまとめたものです。
関連記事:
Angular フィルター大文字/小文字を使用して大文字小文字変換機能を実装する例
Angular 操作イベントコマンド ng-click を使用して複数のパラメーターを渡す例
txt ファイルを実装する JavaScript コードアップロードプレビュー機能
以上がVue ドキュメントの見落とされやすいいくつかの部分の詳細な分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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

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

私はあなたの日常的な技術ツールを使用して機能的なマルチテナントSaaSアプリケーション(EDTECHアプリ)を作成しましたが、あなたは同じことをすることができます。 まず、マルチテナントSaaSアプリケーションとは何ですか? マルチテナントSaaSアプリケーションを使用すると、Singの複数の顧客にサービスを提供できます

この記事では、許可によって保護されたバックエンドとのフロントエンド統合を示し、next.jsを使用して機能的なedtech SaaSアプリケーションを構築します。 FrontEndはユーザーのアクセス許可を取得してUIの可視性を制御し、APIリクエストがロールベースに付着することを保証します

JavaScriptは、現代のWeb開発のコア言語であり、その多様性と柔軟性に広く使用されています。 1)フロントエンド開発:DOM操作と最新のフレームワーク(React、Vue.JS、Angularなど)を通じて、動的なWebページとシングルページアプリケーションを構築します。 2)サーバー側の開発:node.jsは、非ブロッキングI/Oモデルを使用して、高い並行性とリアルタイムアプリケーションを処理します。 3)モバイルおよびデスクトップアプリケーション開発:クロスプラットフォーム開発は、反応および電子を通じて実現され、開発効率を向上させます。

JavaScriptの最新トレンドには、TypeScriptの台頭、最新のフレームワークとライブラリの人気、WebAssemblyの適用が含まれます。将来の見通しは、より強力なタイプシステム、サーバー側のJavaScriptの開発、人工知能と機械学習の拡大、およびIoTおよびEDGEコンピューティングの可能性をカバーしています。

JavaScriptは現代のWeb開発の基礎であり、その主な機能には、イベント駆動型のプログラミング、動的コンテンツ生成、非同期プログラミングが含まれます。 1)イベント駆動型プログラミングにより、Webページはユーザー操作に応じて動的に変更できます。 2)動的コンテンツ生成により、条件に応じてページコンテンツを調整できます。 3)非同期プログラミングにより、ユーザーインターフェイスがブロックされないようにします。 JavaScriptは、Webインタラクション、シングルページアプリケーション、サーバー側の開発で広く使用されており、ユーザーエクスペリエンスとクロスプラットフォーム開発の柔軟性を大幅に改善しています。

Pythonはデータサイエンスや機械学習により適していますが、JavaScriptはフロントエンドとフルスタックの開発により適しています。 1. Pythonは、簡潔な構文とリッチライブラリエコシステムで知られており、データ分析とWeb開発に適しています。 2。JavaScriptは、フロントエンド開発の中核です。 node.jsはサーバー側のプログラミングをサポートしており、フルスタック開発に適しています。


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

Dreamweaver Mac版
ビジュアル Web 開発ツール

WebStorm Mac版
便利なJavaScript開発ツール

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

mPDF
mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。
