AngularJSをクリックしてコントローラから選択したオプションにアクセスする方法
-
20-12-2019 - |
質問
UI-BootstrapのTabset内のタブにng-model
属性を持つSELECTフィールドがあります。タブにはボタンもあります。ボタンをクリックすると、モデル内の選択した値を取得します。私は
<select ... ng-model="selectedOption"></select>
<button ng-click="buttonClick()">Click</button>
.
とコントローラ内の
$scope.buttonClick = function() {
//try to access $scope.selectedOption
}
.
しかしそれは値を含んではないようです。$scope
変数を検索しようとしましたが、selectedOption
$$childTail
が含まれているようです。
選択されたオプション値にアクセスするための他の方法はありますか、それとも私のビューの構造を変更する必要がありますか?
解決
Mathew BergとBumbleBeeの答えの両方が働くべきですが、彼らは何が起こっているのか説明していません。
基本的にそれはこのように下がる:
使用しているTabsetディレクティブは、SelectedOptionが実際には内部スコープ(Tabsetのスコープ)にあり、TabsDemoctrlの対処ではありません。 この答えはどの翻訳が行われているかを説明します。断続的なモデルにどのようにアクセスするか
Transcleusionはモデルの浅いコピーを作ります。そのため、TabsDemoctrlのtransclusion
のようなinit selectedオプションが選択された場合でも、SELECTは開始時に選択されたときに5つの変更が表示されますが、タブセットの子には変更が表示されません。スコープ5は単にコピーされ、更新されているものはあなたの範囲ではなくタブセットの範囲内にあります。
選択したモデルにオブジェクトを使用することもできます。トランスクークリュージョンは浅いコピーを作成するので、オブジェクト/配列/関数は参照によってコピーされ、変数は値によってコピーされます。これはまた、内部範囲からあなたのTabsDemoctrlのボタンをクリックすることができる理由です。
別の代替ソリューション(オブジェクトバージョン)を使用してPLNKRを更新しました:
コントローラにオブジェクトを作成
$scope.selection = {};
.
とこのようなモデルに使用されています
ng-model="selection.option"
.
他のヒント
Angular UIタブ/ Tabset Direcive新しいスコープを作成するように、親スコープにアクセスするには(あなたがしようとしているもの)$ pargy
を添付してください。<select name="selectedCampaign" ng-model="$parent.selectedOption" ng-options="option for option in options"></select>
.
更新されたPlunkr:> http://plnkr.co/edit/bgmmn4tjrwm72zxeqg3n
編集:謝罪、私は質問を誤解させます、あなたはただ何をしないでください。
<select ... ng-model="selectedOption"></select>
<button ng-click="buttonClick(selectedOption)">Click</button>
$scope.buttonClick = function(selectedOption) {
selectedOption.whatever...
}
.