今日は、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ゲームコンソールのサンプルコードを実装します
1. プラグインを追加し、pomファイルの下に次の設定を追加します。 <!-- mybatis...
Tencent QQのホームページがリニューアルされ、Webフロントエンド開発がますます注目を集めて...
目次1. オプションの連鎖演算子 [? .】 2. 論理的な空の代入 (?? =) 3. 論理和代入...
Nginx (エンジン x) は、IMAP/POP3/SMTP サービスも提供する高性能 HTTP ...
実際のWeb開発では、画像の挿入やCSSファイルなどすべてパスが必要となります。ファイルパスを誤って...
基本的な構文: <input type="hidden" name=&qu...
序文このサービスは数か月前からMySQLに導入されています。私の仕事は基本的にターミナルで行われるた...
nginx (エンジン x) は、高性能な HTTP およびリバース プロキシ サーバー、メール プ...
1. 複数サーバーの優先順位たとえば、各サーバー ブロックがポート 80 をリッスンする場合、www...
正規表現を使用してIEブラウザのバージョンを判別するIEブラウザかどうか確認するif (docume...
Nginx は、マスター プロセス (MasterProcess) と、同じ数のホスト CPU コア...
そこで、この問題を解決するために埋め込みフレームワークを導入します。具体的な原則は、フォームがデータ...
目次Vueのレスポンシブシステムの基本原則1. Object.definePropertyの使い方を...
Windows 64ビットでのMySQLのインストールについて説明します。5.7以降、MySQLの...
残念ながら、社内の IM のテスト中に MYSQL_DATA_TRUNCATED エラーが再び発生し...