今日は、Vue の計算プロパティについてお話ししましょう。計算プロパティの利点をよりよく理解するために、まずはケースを通して計算プロパティをゆっくり理解してみましょう。次のケースがあります。2 つの入力ボックスと span タグを定義します。span タグの内容は、2 つの入力ボックスの値です。span タグの内容は、入力ボックスの内容に応じて変化します。 補間式この効果を実現するために、まず補間表現法を使用します。 <本文> <div id="アプリ"> 姓: <input type="text" v-model=firstName> </br> </br> 名前: <input type="text" v-model=lastName></br> </br> 名前: <span>{{firstName}}{{lastName}}</span> </div> </本文> <script type="text/javascript"> 新しいVue({ el: "#app", データ: { firstName: '张', 姓: '三' }, メソッド: { } }) </スクリプト> 必要な効果を簡単に達成できることが分かりますが、ここで別の要件を追加したい場合、英語を入力するときに最初の文字を大文字にする必要があります。現時点では、次の方法のみを使用できます。 <本文> <div id="アプリ"> ファーストネーム: <input type="text" v-model=firstName> </br> </br> 姓: <input type="text" v-model=姓></br> </br> フルネーム: <span>{{firstName.replace(firstName[0],firstName[0].toUpperCase())}} {{lastName.replace(lastName[0],lastName[0].toUpperCase())}}</span> </div> </本文> <script type="text/javascript"> var str = '' 新しいVue({ el: "#app", データ: { ファーストネーム: 'ジョー', 姓: 'lili' }, メソッド: { } }) </スクリプト> 補間式から、目的の効果は得られるものの、コードが非常に長く、読みにくいことがわかります。現時点では、メソッドにメソッドを追加することで、この効果を実現できると考えられます。 方法メソッドにfullNameメソッドを追加する <本文> <div id="アプリ"> ファーストネーム: <input type="text" v-model=firstName> </br> </br> 姓: <input type="text" v-model=姓></br> </br> フルネーム: <span>{{fullName()}}</span> </div> </本文> <script type="text/javascript"> var str = '' 新しいVue({ el: "#app", データ: { ファーストネーム: 'ジョー', 姓: 'lili' }, メソッド: { フルネーム() { a = '' とします。 b = '' とします。 (this.firstName.length != 0) の場合 a = this.firstName.replace(this.firstName[0], this.firstName[0].toUpperCase()) (this.lastName.length != 0) の場合 b = this.lastName.replace(this.lastName[0], this.lastName[0].toUpperCase()) a + ' ' + b を返す } } }) </スクリプト> コードが長すぎるという問題は、メソッドを通じてうまく解決できることがわかります。しかし、別の問題に直面しています。vue のデータ属性を調べると、data 内のデータが変更される限り、ページ内でデータが使用される場所が更新されることがわかります。したがって、firstName と lastName のデータが変更されると、fullName メソッドが再度呼び出され、特定の状況下ではコード効率が低下します。さらに、methods 内のメソッドは、補間式で使用される回数だけ実行されます。上記の 2 つの方法の欠点に基づいて、計算プロパティを使用する別の方法が登場しました。 計算された一部のプロパティは、computed: 計算プロパティで定義できます。計算属性の本質は実際にはメソッドですが、使用時には属性として直接使用できます。具体的な特徴は以下のとおりです
<本文> <div id="アプリ"> ファーストネーム: <input type="text" v-model=firstName> </br> </br> 姓: <input type="text" v-model=姓></br> </br> フルネーム: <span>{{fullName}}</span></br> </br> フルネーム: <span>{{fullName}}</span></br> </br> フルネーム: <span>{{fullName}}</span> </div> </本文> <script type="text/javascript"> var str = '' 新しいVue({ el: "#app", データ: { ファーストネーム: 'ジョー', 姓: 'lili' }, 計算: { //get の機能は何ですか? fullName が読み取られると get が呼び出され、戻り値は fullName の値になります。//get はいつ呼び出されますか? 1. fullName が初めて読み取られるとき。 2. 依存データが変更された場合 fullName: { 得る() { console.log('こんにちは、computed を呼び出しました') a = '' とします。 b = '' とします。 (this.firstName.length != 0) の場合 a = this.firstName.replace(this.firstName[0], this.firstName[0].toUpperCase()) (this.lastName.length != 0) の場合 b = this.lastName.replace(this.lastName[0], this.lastName[0].toUpperCase()) a + ' ' + b を返す } } } }) </スクリプト> </html> 前に、methods 内のメソッドがページ内で n 回使用されると n 回呼び出されると言いましたが、computed 内のプロパティではこれは発生しません。上記のコードでは、ページ内で同じ計算プロパティを 3 回使用しましたが、結果は 1 回しか出力されませんでした。同様に、メソッド内で完全なメソッドを使用しましたが、結果は 3 回出力されました。つまり、メソッドは 3 回呼び出されたことになります。なぜこんなことが起きたのでしょうか?これは、computed にはキャッシュ メカニズムがありますが、methods にはキャッシュ メカニズムがないためです。コードが最初の fullName を解析すると、fullName の結果がキャッシュされます。2 番目と 3 番目の fullName が解析されると、結果がすでにキャッシュ内にあることがわかり、呼び出されません。 これで、computed の使用法について大まかに理解できたので、補足してみましょう。 computedでは、計算プロパティにsetメソッドを追加することで割り当て効果を実現できます。 <本文> <div id="アプリ"> ファーストネーム: <input type="text" v-model=firstName> </br> </br> 姓: <input type="text" v-model=姓></br> </br> フルネーム: <span>{{fullName}}</span></br> </br> </div> </本文> <script type="text/javascript"> var str = '' var アプリ = 新しい Vue({ el: "#app", データ: { ファーストネーム: 'ジョー', 姓: 'lili' }, 計算: { //get の機能は何ですか? fullName が読み取られると get が呼び出され、戻り値は fullName の値になります。//get はいつ呼び出されますか? 1. fullName が初めて読み取られるとき。 2. 依存データが変更された場合 fullName: { 得る() { console.log(これ) this.firstName + this.lastName を返す }, 設定(値) { this.firstName = val[0] this.lastName = val[1] } } } }) </スクリプト> コンソールで fullName に値を割り当てると、firstName と lastName の両方が変更されることがわかります。 計算プロパティにgetのみがありsetがない場合は、次のコードのように直接記述できます。 計算: { フルネーム(){ console.log(これ) this.firstName + this.lastName を返す } } 要約するこの記事はこれで終わりです。皆さんのお役に立てれば幸いです。また、123WORDPRESS.COM のその他のコンテンツにも注目していただければ幸いです。 以下もご興味があるかもしれません:
|
>>: CSS3はNESゲームコンソールのサンプルコードを実装します
Nginx ログは、ユーザーの住所の場所や行動プロファイルなどを分析するために使用できます。Elas...
序文TCP サーバの最大同時接続数に関して、「ポート番号の上限が 65535 であるため、TCP サ...
コードをコピーコードは次のとおりです。 <html> <ヘッド> <m...
始める前に、process.env.NODE_ENV にはデフォルトで開発と本番の 2 つの状態しか...
MySQL 変数には、システム変数とシステム変数が含まれます。今回の学習課題はユーザー定義変数です。...
Centos7 スイッチブートカーネル注: 必要に応じて、最初にyum update -yを実行して...
この記事では、宝くじマシンの効果を実現するためのJavaScriptの具体的なコードを参考までに共有...
1. シナリオの説明:私たちの環境ではマイクロサービスを使用しています。各プログラムには個別のプロセ...
1. エラーの詳細一度、データベース全体のバックアップを手動で実行したときに、次のエラーが発生しまし...
目次ダーティページ(メモリページ)ダーティページが表示されるのはなぜですか?メモリ管理メカニズムの簡...
MySQL データベースをバックアップするためのツールは多数あります。過去 2 日間で、C# を使用...
ネットサーフィンをしていると、私の注意を引こうとする美しいグラフィックでいっぱいの Web サイトを...
この記事はRHEL7.5でのMySQL 8.0.11のインストールチュートリアルを記録しています。具...
目次過去1週間の時間を取得する過去1か月の時間を取得する過去3か月分を取得新しい Date() と ...
サーバーB(172.17.166.11)の電源がオンまたは再起動されると、サーバーA(172.17....