[解決済み】AngularJS:コントローラ間で変数を渡すにはどうすればよいですか?
2022-03-26 03:34:15
質問
Angularのコントローラを2つ持っています。
function Ctrl1($scope) {
$scope.prop1 = "First";
}
function Ctrl2($scope) {
$scope.prop2 = "Second";
$scope.both = Ctrl1.prop1 + $scope.prop2; //This is what I would like to do ideally
}
を使うことはできません。
Ctrl1
内部
Ctrl2
というのは、未定義だからです。しかし、このように渡すと...。
function Ctrl2($scope, Ctrl1) {
$scope.prop2 = "Second";
$scope.both = Ctrl1.prop1 + $scope.prop2; //This is what I would like to do ideally
}
エラーが出ます。どなたか方法をご存じないでしょうか?
すること
Ctrl2.prototype = new Ctrl1();
も失敗します。
注意 これらのコントローラは、互いにネストされていません。
解決方法は?
複数のコントローラで変数を共有する方法の1つは サービスを作成する を作成し、それを使用したいコントローラでインジェクトします。
簡単なサービス例です。
angular.module('myApp', [])
.service('sharedProperties', function () {
var property = 'First';
return {
getProperty: function () {
return property;
},
setProperty: function(value) {
property = value;
}
};
});
コントローラでサービスを利用する。
function Ctrl2($scope, sharedProperties) {
$scope.prop2 = "Second";
$scope.both = sharedProperties.getProperty() + $scope.prop2;
}
で非常にきれいに記述されています。 このブログ (特にLesson 2以降)。
複数のコントローラでこれらのプロパティにバインドする場合は、プリミティブ型 (boolean、string、number) ではなくオブジェクトのプロパティにバインドすると、バインドした参照を保持できることがわかりました。
例
var property = { Property1: 'First' };
の代わりに
var property = 'First';
.
UPDATEです。 より分かりやすくするために 以下はフィドルです。 の例を示しています。
-
共有値の静的コピーへのバインディング (myController1 の場合)
- プリミティブ(文字列)へのバインディング
- オブジェクトのプロパティへのバインディング(スコープ変数への保存)
-
値が更新されるとUIが更新される共有値へのバインディング(myController2内)
- プリミティブ(文字列)を返す関数へのバインディング
- オブジェクトのプロパティへのバインディング
- オブジェクトのプロパティへの双方向バインディング
関連
-
[解決済み】最大呼び出しスタックサイズ超過エラーとその修正方法とは?
-
[解決済み】React.jsの配列の子要素のユニークキーを理解する
-
[解決済み] 配列から特定の項目を削除するにはどうすればよいですか?
-
[解決済み] JavaScriptで空文字列/未定義文字列/null文字列をチェックするにはどうすればよいですか?
-
[解決済み] JavaScriptで要素のクラスを変更するにはどうすればよいですか?
-
[解決済み] JavaScriptで文字列をbooleanに変換するにはどうしたらいいですか?
-
[解決済み] Node.jsのプログラムにコマンドライン引数を渡すにはどうしたらいいですか?
-
[解決済み] AngularJSでデータバインディングはどのように機能するのですか?
-
[解決済み] AngularJS コントローラにおける 'this' と $scope の比較
-
[解決済み】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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】パッシブイベントリスナー内部でpreventDefaultができない
-
[解決済み】SecurityError: オリジンを持つフレームがクロスオリジンフレームにアクセスするのをブロックした
-
[解決済み】npm install --legacy-peer-deps は具体的に何をするのですか?どんなときに推奨されるのか/どんな使用例が考えられるのか?
-
[解決済み】FirefoxでGoogle Maps V3をリモートで使用すると「googleが定義されていません」と表示される。
-
[解決済み】TypeError: res.status は関数ではありません。
-
[解決済み】 Uncaught Reference Error: stLight is not defined (in Chrome only)
-
[解決済み】SyntaxError: 期待された式が、'<'を得た。
-
[解決済み】Syntax error: JavaScriptの不正なreturnステートメント
-
[解決済み】ETIMEDOUTエラーの対処方法は?
-
[解決済み】'useState' が定義されていない no-undef React