[解決済み] オブジェクトと選択機能を備えたAngularJS BootstrapUI Typeahead
質問
Angularでtypeaheadを実装しようとしています。 http://angular-ui.github.io/bootstrap/ typeaheadフィールドは完全な住所を表示しますが、クリックされると別のフィールドにその住所の郵便番号だけが入力されます。このためにng-changeまたはng-clickを使おうとしていますが、うまくいきません。
angular.module('myApp', ['ui.bootstrap'])
.controller("mainCtrl", function ($scope) {
$scope.selected = '';
$scope.states = [{postcode:'B1',address:'Bull ring'},{postcode:'M1',address:'Manchester'}];
$scope.setPcode = function(site) {
$scope.selPcode = site.postcode;
};
});
<div class="container">
<div ng-controller="mainCtrl" class="row-fluid">
<form class="row-fluid">
<div class="container-fluid">
postcode <input type="text" ng-model="selPcode" />
typeahead <input type="text" ng-change="setPcode(site)" ng-model="selected" typeahead="state.address for state in states | filter:$viewValue" />
</div>
</form>
</div>
</div>
何かアイデアはありますか?
解決方法は?
からのtypeaheadディレクティブは http://angular-ui.github.io/bootstrap/ は非常に、非常に柔軟で、望ましい機能を実現する方法はたくさんあります。ここでは、そのうちの2つを紹介します。
まず、typeaheadディレクティブは、AngularJSの
セレクト
ディレクティブを使用します。これにより、表示されるラベルと、モデル値としてバインドされるデータを完全に制御することができます。つまり、単純に住所をラベルとして表示し、郵便番号を
selPcode
を直接指定します。
<input type="text" ng-model="selPcode" typeahead="state.postcode as state.address for state in states | filter:$viewValue" typeahead-editable="false" />
ここで重要なのは
as
の部分は
typeahead
の式で表されます。
typeahead="state.postcode as state.address for state in states
また、私が使っているのは
typeahead-editable="false"
属性を使って、選択されたときだけモデルをバインドします。動作するjsFiddleはこちら。
http://jsfiddle.net/jLupa/
コールバック関数を本当に使う必要がある場合のもうひとつの解決策は
typeahead-on-select
属性で指定します。
<input type="text" typeahead-on-select="setPcode($item)" ng-model="selected" typeahead="state.address for state in states | filter:$viewValue" />
マッチしたものが選択されたときのコールバックを指定することができます。ここで動くフィドル http://jsfiddle.net/t8BV2/
最後のノートとして。
ng-change
は、入力が変化したときに反応するため、ここでは動作しません。
ng-click
は入力フィールドのクリックに反応し、マッチポップアップには反応しないので、これもあまり意味がありません。その上、キーボードで選択されたものには反応しません。
関連
-
[解決済み] AngularJSのng-showとフェードアニメーション
-
[解決済み] AngularJS : ローカルストレージを使用する
-
[解決済み] AngularJS 。scope.apply()呼び出し時の$digest already in progressエラーを防ぐ。
-
処理されない例外が発生しました。Angular 実行中のプロジェクトで NGCC に失敗しました。
-
[解決済み] AngularJSでデータバインディングはどのように機能するのですか?
-
[解決済み] AngularJSを使用して、ブラウザのコンソールで$scope変数にアクセスするにはどうすればよいですか?
-
[解決済み] AngularJS コントローラにおける 'this' と $scope の比較
-
[解決済み] 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で$httpリクエスト中にスピナーGIFを表示する?
-
[解決済み] X-Frame-Options'を'SAMEORIGIN'に設定しているため、フレーム内での表示を拒否された。
-
[解決済み] Angular JS $locationChangeStart 次の url ルートオブジェクトを取得する
-
[解決済み] ag-gridの行の追加/削除
-
[解決済み] AngularJSの$parentは何を意味するのですか?
-
[解決済み] エラーです。[$injector:unpr] 不明なプロバイダです。ルートプロバイダ
-
[解決済み] Angularのui-routerでデフォルトの状態を設定する方法
-
[解決済み] AngularJSのリソースプロミス
-
[解決済み] Angular.js: $evalの仕組みとバニラevalとの違いは何ですか?
-
[解決済み] ng-repeat :単一フィールドによるフィルタリング