[解決済み] ビューのロード時にAngularJSの初期化コードを実行する
質問
ビューを読み込む際に、関連するコントローラでいくつかの初期化コードを実行したいと思います。
これを行うために、私はビューのメイン要素でng-initディレクティブを使用しました。
<div ng-init="init()">
blah
</div>
で、コントローラの中に
$scope.init = function () {
if ($routeParams.Id) {
//get an existing object
});
} else {
//create a new object
}
$scope.isSaving = false;
}
最初の質問:このやり方は正しいのでしょうか?
次に、私はイベントが行われるシーケンスに問題があります。ビューに「保存」ボタンがあり、これは
ng-disabled
ディレクティブをこのように使用します。
<button ng-click="save()" ng-disabled="isClean()">Save</button>
その
isClean()
関数はコントローラで定義されています。
$scope.isClean = function () {
return $scope.hasChanges() && !$scope.isSaving;
}
見ての通り、これは
$scope.isSaving
フラグで初期化された
init()
関数で初期化されます。
問題:ビューがロードされるとき、isClean関数が呼び出されます。
の前に
は
init()
関数の前にあるため、フラグ
isSaving
は
undefined
. これを防ぐにはどうしたらいいのでしょうか?
どのように解決するのですか?
ビューがロードされると、それに関連するコントローラもロードされます。 このとき
ng-init
を使用する代わりに、単純に
init()
メソッドを呼び出すだけです。
$scope.init = function () {
if ($routeParams.Id) {
//get an existing object
} else {
//create a new object
}
$scope.isSaving = false;
}
...
$scope.init();
コントローラは
ng-init
の前に実行されるので、これは2番目の問題も解決します。
として
John David Five
にも書いてありますが、これを
$scope
にアタッチしないほうがいいかもしれません。
var init = function () {
// do something
}
...
init();
特定のデータがプリセットされるのを待ちたい場合、そのデータ要求を解決に移すか、そのコレクションまたはオブジェクトにウォッチャーを追加し、データがinit基準を満たしたときにinitメソッドを呼び出します。データの要件が満たされた時点でウォッチャーを削除し、ウォッチしているデータが変更されてinitメソッドを実行するための基準を満たした場合にinit関数がランダムに再実行されないようにします。
var init = function () {
// do something
}
...
var unwatch = scope.$watch('myCollecitonOrObject', function(newVal, oldVal){
if( newVal && newVal.length > 0) {
unwatch();
init();
}
});
関連
-
[解決済み】Angularjsのng-viewが動作しない。
-
[解決済み] Angular ng-repeat エラー "リピータ内の重複は許可されません。"
-
[解決済み] 'ApplicationSignInManager' が見つからない(ASP.NET MVC)
-
[解決済み] AngularJSのリソースプロミス
-
[解決済み] AngularJS 。scope.apply()呼び出し時の$digest already in progressエラーを防ぐ。
-
[解決済み] Angularjsを使用してローカルストレージにデータを保存するにはどうすればよいですか?
-
[解決済み] Ui-srefがクリッカブルリンクを生成しない/動作しない
-
[解決済み] AngularJSのコントローラからビューにHTMLを挿入する
-
[解決済み] AngularJSの部分的なビューに基づいて動的にヘッダーを変更するには?
-
[解決済み] Angularディレクティブのデータ変更に対する$watch'ing
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] X-Frame-Options'を'SAMEORIGIN'に設定しているため、フレーム内での表示を拒否された。
-
[解決済み] ajaxリクエスト時にAngularjsのローディング画面が表示される。
-
[解決済み] AngularJSでkeypressイベントを使用するには?
-
[解決済み] AngularJSの$parentは何を意味するのですか?
-
[解決済み] AngularJsでng-Cloakディレクティブを実際に使用する方法とは?
-
[解決済み] Apigee API へのリクエストで 401 レスポンスエラーが発生する
-
[解決済み] 誰かangularjsの$qサービスの使用について説明してください。[重複しています]。
-
[解決済み] angularjsで$compileを操作する
-
[解決済み] AngularJSのng-repeatでキーと値を反復処理する方法は?
-
[解決済み] ng-classを使った複数クラスの追加