Angular でカスケード ドロップダウンを実現しようとしています。バインディングのおかげで自然に動くと思いました。下記参照:
<select name="client" ng-model="selectedRequest.client" ng-options="c.name for c in clients track by c.id" required></select>
<select id="department" ng-model="selectedRequest.department" ng-options="d.defaultLabel for d in selectedRequest.client.departments track by d.id"></select>
ビューが読み込まれると機能し、クライアントにバインドされた部門と一致する部門を確認できます。ただし、 selectedRequest.client が変更されるたびに、部門ドロップダウンのソースも変更されるはずですが、代わりに空になります。
編集
子ドロップダウンを次のように変更しました:
<select id="department" ng-model="selectedRequest.department" ng-options="d.defaultLabel for d in departments track by d.id | filter:{clientId: selectedRequest.client.id}"></select>
ただし、今回はフィルターを無視して、ドロップダウンのすべての部門を読み込みます。
** 編集 2 **
に変更:
<select name="client" ng-model="requestService.selectedRequest.client" ng-options="c as c.name for c in clients track by c.id" required></select>
<select id="department" ng-model="requestService.selectedRequest.department" ng-options="d.defaultLabel for d in departments | filter:{clientId: requestService.selectedRequest.client.id}"></select>
クライアントが選択されたときにソースが正しく変更されるようになりました。ただし、最初の選択、つまり起動時に適切な部門を設定することは機能しません。これは、'track by id' ビットを削除したためです。