[解決済み] 子コントローラから親スコープにアクセスするAngularJS
2022-03-26 15:51:47
質問
コントローラの設定に
data-ng-controller="xyzController as vm"
親子でネストされたコントローラを持つシナリオがあります。ネストされた html で親のプロパティにアクセスするために
$parent.vm.property
しかし、子コントローラから親プロパティにアクセスする方法がわかりません。
スコープをインジェクションして、その後に
$scope.$parent.vm.property
しかし、これは動作しませんか?
どなたかアドバイスをお願いします。
どのように解決するのですか?
以下のようなHTMLであれば、以下のようにすることができます。
<div ng-controller="ParentCtrl">
<div ng-controller="ChildCtrl">
</div>
</div>
そうすると、次のように親スコープにアクセスできます。
function ParentCtrl($scope) {
$scope.cities = ["NY", "Amsterdam", "Barcelona"];
}
function ChildCtrl($scope) {
$scope.parentcities = $scope.$parent.cities;
}
ビューから親コントローラーにアクセスする場合は、次のようにします。
<div ng-controller="xyzController as vm">
{{$parent.property}}
</div>
jsFiddleを参照してください。 http://jsfiddle.net/2r728/
更新情報
実は
cities
は、親コントローラのスコープ変数をすべて子コントローラに継承します。そのため、理論的には
$parent
. 上記の例は、次のように書くこともできます。
function ParentCtrl($scope) {
$scope.cities = ["NY","Amsterdam","Barcelona"];
}
function ChildCtrl($scope) {
$scope.parentCities = $scope.cities;
}
AngularJSのドキュメントでは、この方法を採用しています。
ここで
についての詳細は
$scope
.
もう一つの更新
元の投稿者への回答としては、こちらの方が良いと思います。
HTML
<div ng-app ng-controller="ParentCtrl as pc">
<div ng-controller="ChildCtrl as cc">
<pre>{{cc.parentCities | json}}</pre>
<pre>{{pc.cities | json}}</pre>
</div>
</div>
JS
function ParentCtrl() {
var vm = this;
vm.cities = ["NY", "Amsterdam", "Barcelona"];
}
function ChildCtrl() {
var vm = this;
ParentCtrl.apply(vm, arguments); // Inherit parent control
vm.parentCities = vm.cities;
}
を使用する場合は
controller as
メソッドを使用すると、次のように親スコープにアクセスすることもできます。
function ChildCtrl($scope) {
var vm = this;
vm.parentCities = $scope.pc.cities; // note pc is a reference to the "ParentCtrl as pc"
}
へのアクセスには、さまざまな方法があります。
$scopes
.
フィドルを更新しました
function ParentCtrl() {
var vm = this;
vm.cities = ["NY", "Amsterdam", "Barcelona"];
}
function ChildCtrl($scope) {
var vm = this;
ParentCtrl.apply(vm, arguments);
vm.parentCitiesByScope = $scope.pc.cities;
vm.parentCities = vm.cities;
}
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.20/angular.min.js"></script>
<div ng-app ng-controller="ParentCtrl as pc">
<div ng-controller="ChildCtrl as cc">
<pre>{{cc.parentCities | json}}</pre>
<pre>{{cc.parentCitiesByScope | json }}</pre>
<pre>{{pc.cities | json}}</pre>
</div>
</div>
関連
-
[解決済み] AngularJSで$httpリクエスト中にスピナーGIFを表示する?
-
[解決済み] AngularJS 。scope.apply()呼び出し時の$digest already in progressエラーを防ぐ。
-
[解決済み] Ui-srefがクリッカブルリンクを生成しない/動作しない
-
[解決済み] AngularJSを使用して、ブラウザのコンソールで$scope変数にアクセスするにはどうすればよいですか?
-
[解決済み] AngularJSで$scope.$watchと$scope.$applyを使用するにはどうすればよいですか?
-
[解決済み] AngularJS コントローラにおける 'this' と $scope の比較
-
[解決済み] AngularJSのコントローラからビューにHTMLを挿入する
-
[解決済み] ng-modelとng-bindの違いは何ですか?
-
[解決済み】AngularJSのディレクティブスコープにおける「@」と「=」の違いは何ですか?
-
[解決済み】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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] オブジェクトと選択機能を備えたAngularJS BootstrapUI Typeahead
-
[解決済み] ajaxリクエスト時にAngularjsのローディング画面が表示される。
-
[解決済み] AngularJSでkeypressイベントを使用するには?
-
[解決済み] どのようにangularJSでrouteProviderとlocationProviderを設定するのですか?
-
[解決済み] AngularJSの$parentは何を意味するのですか?
-
[解決済み] ng-pattern` - 数字だけをチェックする方法は?
-
[解決済み] AngularJS: ngRouteが動作しない。
-
[解決済み] Angular.js: $evalの仕組みとバニラevalとの違いは何ですか?
-
[解決済み] ServiceとFactoryで迷う
-
[解決済み] AngularJSでEnterキーを押したときにフォームを送信する