angular.js で双方向バインディングを実装する方法についての簡単な説明 $watch $digest $apply_AngularJS
Angular.js の機能、双方向バインディング。
ビューの変更をデータに直接反映できる魔法の機能です。データの変更をリアルタイムでビューに通知します。
これは、次の 3 つの重要なスコープメソッドのおかげです:
$watch
$ダイジェスト
$apply
それらの違いを紹介しましょう:
$watch
これはスコープ上のデータをリッスンするリスナーです
メソッドの説明:
$scope.$watch('参数',function(newValue,oldValue){ //逻辑处理 })
上記でリスナーを作成しました。
「パラメータ」は、$scope オブジェクトの下のオブジェクト (またはオブジェクトの属性) であり、
$scope.name プロパティを監視するとします。
$scope.$watch('name',function(newValue,oldValue){ //逻辑处理 })
上記のコードと同様、「name」には引用符が必要です
パラメータの後にコールバック関数が続きます。コールバック関数パラメータは、監視対象の属性、変更後の新しい値、および前回の変更前の古い値を返します。
$ダイジェスト
彼は、スコープ内のデータが変更されたかどうかをチェックする責任を負い、特定の属性が変更された場合、すぐにこの属性をリスナー ($watch によって登録されたリスナー) に通知し、リスナーをトリガーし、コールバック関数を実行します。 .
$apply
このメソッドは $digest に非常に似ており、$digest はスコープ内のすべてのデータをチェックします
$apply は rootScope 内のすべてのデータをチェックするのと同等で、親から子まですべてのデータをチェックします
$apply() == $rootScope.$digest()
$apply() メソッドには 2 つの形式があります。
最初の関数はパラメータとして関数を受け入れます。
これにより、$digest 関数がトリガーされ、パラメーター内の関数
2 番目のタイプはパラメータを受け入れません。
これは $digest の親から子へのサイクルをトリガーするだけです
Angular.js では、$digest は直接呼び出されず、代わりに $scope.$apply() が使用されます
モニターを設定していないのに、ビューとデータが双方向にバインドされるのはなぜですか
たとえば、テキスト ボックス ng-model="name"
このとき、実際には、上記のビューとの双方向バインディングに対応する属性名が $scope オブジェクトの下にあります
それを達成するにはどうすればよいですか?
実際、ng-model="name" または ng-bind="name" または {{name}} を定義するとき
この時点で、angular.js は $scope モデルの "name" 属性のリスナーを自動的に設定します:
$scope.$watch('name', function(newValue, oldValue) { //监听 name 属性的变化 });
angular.js がリスナーの自動作成に役立つことが判明したため、このプロパティと $scope.name データはリアルタイムで双方向にバインドされます。
もちろん、データが変更されていることがわかりますが、双方向バインディングは無効ですか?
いいえ
$scope モデルがダイジェスト ループを通過するときに、データがまだ返されていないだけです。
たとえば、メソッドを非同期で呼び出すと、callbac によって返されるデータ
たとえば、setTimeout でスケジュールされたトリガー関数を設定し、モデル データを変更します
つまり、$scope モデルのダイジェスト サイクルが失われ、その結果、モデルは新しいデータに従って更新するように UI に通知しませんでした。
このような問題が発生した場合はどうすればよいですか?
双方向バインディングを実現するには、ダイジェストを手動で呼び出してループ内のデータをチェックする必要があります
上で述べたように、通常はダイジェスト メソッドを直接呼び出さず、$apply メソッドを手動で呼び出して間接的に $digest ループをトリガーします。
次のように:
setTimeout(function() { $scope.name= '一介布衣'; $scope.$apply(); }, 2000);
問題はここです。apply メソッドを手動で呼び出す必要があります
これまでのところ、angular.js は一部のディレクティブとサービスに対して $apply() メソッドを自動的に実装しています。
例: ng-click、ng-model、$timeout サービス、$http サービスなど
呼び出し後、angular.js は自動的に $apply() を呼び出し、双方向のデータ バインディングを実現します。

JavaScriptコアデータ型は、ブラウザとnode.jsで一貫していますが、余分なタイプとは異なる方法で処理されます。 1)グローバルオブジェクトはブラウザのウィンドウであり、node.jsのグローバルです2)バイナリデータの処理に使用されるNode.jsの一意のバッファオブジェクト。 3)パフォーマンスと時間の処理にも違いがあり、環境に従ってコードを調整する必要があります。

javascriptusestwotypesofcomments:シングルライン(//)およびマルチライン(//)

PythonとJavaScriptの主な違いは、タイプシステムとアプリケーションシナリオです。 1。Pythonは、科学的コンピューティングとデータ分析に適した動的タイプを使用します。 2。JavaScriptは弱いタイプを採用し、フロントエンドとフルスタックの開発で広く使用されています。この2つは、非同期プログラミングとパフォーマンスの最適化に独自の利点があり、選択する際にプロジェクトの要件に従って決定する必要があります。

PythonまたはJavaScriptを選択するかどうかは、プロジェクトの種類によって異なります。1)データサイエンスおよび自動化タスクのPythonを選択します。 2)フロントエンドとフルスタック開発のためにJavaScriptを選択します。 Pythonは、データ処理と自動化における強力なライブラリに好まれていますが、JavaScriptはWebインタラクションとフルスタック開発の利点に不可欠です。

PythonとJavaScriptにはそれぞれ独自の利点があり、選択はプロジェクトのニーズと個人的な好みに依存します。 1. Pythonは、データサイエンスやバックエンド開発に適した簡潔な構文を備えた学習が簡単ですが、実行速度が遅くなっています。 2。JavaScriptはフロントエンド開発のいたるところにあり、強力な非同期プログラミング機能を備えています。 node.jsはフルスタックの開発に適していますが、構文は複雑でエラーが発生しやすい場合があります。

javascriptisnotbuiltoncorc;それは、解釈されていることを解釈しました。

JavaScriptは、フロントエンドおよびバックエンド開発に使用できます。フロントエンドは、DOM操作を介してユーザーエクスペリエンスを強化し、バックエンドはnode.jsを介してサーバータスクを処理することを処理します。 1.フロントエンドの例:Webページテキストのコンテンツを変更します。 2。バックエンドの例:node.jsサーバーを作成します。

PythonまたはJavaScriptの選択は、キャリア開発、学習曲線、エコシステムに基づいている必要があります。1)キャリア開発:Pythonはデータサイエンスとバックエンド開発に適していますが、JavaScriptはフロントエンドおよびフルスタック開発に適しています。 2)学習曲線:Python構文は簡潔で初心者に適しています。 JavaScriptの構文は柔軟です。 3)エコシステム:Pythonには豊富な科学コンピューティングライブラリがあり、JavaScriptには強力なフロントエンドフレームワークがあります。


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

SublimeText3 英語版
推奨: Win バージョン、コードプロンプトをサポート!

EditPlus 中国語クラック版
サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

VSCode Windows 64 ビットのダウンロード
Microsoft によって発売された無料で強力な IDE エディター

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

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター
