【发布时间】:2013-10-17 02:47:31
【问题描述】:
我正在尝试在 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' 位。
【问题讨论】:
-
这似乎没问题。您需要创建一个小提琴并回购这个问题。也许部门是空的。
-
我用新方法编辑了我的帖子
-
如果从 ng-options 中删除“track by”会怎样?
-
如果我这样做,它会起作用。但随后绑定丢失,即未设置所选值。
-
作为设计,您可以做的不是在页面加载时自动加载两个数据源,而是在选择城市下拉菜单时发出新请求以获取部门。参考这个jsfiddle来证明$watch的观点
标签: javascript angularjs