[解決済み] AngularJSでモデルチェンジを見るとき、最初のロードを無視するにはどうすればいいですか?
2022-04-15 01:08:40
質問
私は、$scope.fieldcontainerプロパティにディープグラフとして配置されている、単一のエンティティのエディタとして機能するWebページを持っています。REST APIから($resource経由で)レスポンスを取得した後、'fieldcontainer'にウォッチを追加しています。このウォッチを使用して、ページ/エンティティが "dirty"であるかどうかを検出しているのです。今は保存ボタンをバウンスさせていますが、本当はユーザーがモデルを汚すまで保存ボタンを見えないようにしたいのです。
これは、ウォッチを作成した直後に .fieldcontainer = ... の割り当てが行われたためだと思われます。私は最初の誤報を吸収するために "dirtyCount" プロパティを使用することを考えていましたが、それは非常にハッキングのように感じます... そして私はこれを扱うための "Angular idiomatic" 方法があるはずだと考えました - ダーティモデルを検出するために時計を使用しているのは私だけではないはずです。
以下は、私がウォッチを設定したコードです。
$scope.fieldcontainer = Message.get({id: $scope.entityId },
function(message,headers) {
$scope.$watch('fieldcontainer',
function() {
console.log("model is dirty.");
if ($scope.visibility.saveButton) {
$('#saveMessageButtonRow').effect("bounce", { times:5, direction: 'right' }, 300);
}
}, true);
});
UIダーティーングを行うコードをquot;if (dirtyCount >0)" でガードするよりも、もっときれいな方法があるはずだと思い続けています......。
解決方法は?
初期ロードの直前にフラグを設定する。
var initializing = true
そして、最初の $watch が起動したら、次のようにします。
$scope.$watch('fieldcontainer', function() {
if (initializing) {
$timeout(function() { initializing = false; });
} else {
// do whatever you were going to do
}
});
このフラグは、現在のダイジェストサイクルが終了した時点で破棄されるため、次の変更がブロックされることはありません。
関連
-
[解決済み] ページロード時にAngularJSのコントローラ関数を実行する方法は?
-
[解決済み] controllerAs "プロパティを使用する理由は何ですか?
-
[解決済み] AngularJSのコントローラを指定する:ngControllerと$routeProviderを使用する利点
-
[解決済み] AngularJSを使用して、ブラウザのコンソールで$scope変数にアクセスするにはどうすればよいですか?
-
[解決済み] AngularJSのng-repeatでキーと値を反復処理する方法は?
-
[解決済み] AngularJSのng-optionsでvalueプロパティを設定するには?
-
[解決済み] AngularJSのサービスをコンソールからテストするにはどうしたらいいですか?
-
[解決済み】AngularJs:ファイル入力フィールドの変更をチェックする方法は?
-
[解決済み] angularjs(1.x)でHTML要素のid属性を動的に設定する方法は?
-
[解決済み】AngularJSでディレクティブを書くとき、新しいスコープ、新しい子スコープ、または新しい分離されたスコープが必要であるかどうかは、どのように決定するのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] data-ng-file-selectが動作しないのはなぜですか?
-
[解決済み] Angular UI-Routerのマルチビュー
-
[解決済み] どのようにangularJSでrouteProviderとlocationProviderを設定するのですか?
-
[解決済み] ディレクティブ '...' が要求するコントローラ 'ngModel' が見つかりません。
-
[解決済み] AngularJS の ng-disabled ディレクティブに式を指定しても動作しない
-
[解決済み] 新しい/分離されたスコープを求める複数のディレクティブ [ngController, ...] がある。
-
[解決済み] ng-pattern` - 数字だけをチェックする方法は?
-
[解決済み] controllerAs "プロパティを使用する理由は何ですか?
-
[解決済み] なぜAngularJSはselectに空のオプションを含めるのですか?
-
[解決済み] コントローラでフィルタを使用するには?