在AngularJS页我有一个下拉菜单,列出的建筑(设施):角指令NG选项最终选择多个项目
<select ng-model="selectedFacility"
ng-options="facility.abbr for facility in facilities track by facility.id">
</select>
<label>{{selectedFacility.name}}</label>
似乎是工作。下拉列表中的值显示用户选择的内容(缩写),标签中的文本显示相应的长名称。好。
但是,在其他地方,我通过$scope.selectedFacility.id
到$http
调用,并且我注意到它始终是1,无论实际选择哪个建筑物。我看着(在Chrome F12)深,我发现我在某些时候选择所有收存箱项具有selected="selected"
属性:
<option value="1" label="Engineering" selected="selected">Engineering</option>
<option value="2" label="Biology" selected="selected">Biology</option>
<option value="3" label="CompSci">CompSci</option>
<option value="4" label="Admissions" selected="selected">Admissions</option>
<option value="5" label="Security">Security</option>
如从上面的输出明确,我所选择的项目1,2,和在某个点处的4个。我的猜测是,由于第一个项目最初被选中,它总是具有“选定”属性,因此selectedFacility.id=1
。但是,如何告诉Angular删除选定的属性?这是一个常规的下拉菜单,没有任何方式选择多个项目 - 但多个项目被标记为选中
更新。看起来这是很重要的控制器有以下几点:
$scope.selectedFacility= {};
$scope.facilities = facility.getFacilities().query(function(facilities) {
$scope.selectedFacility=facilities[0];
});
和设备是从服务器检索设施信息提供服务:
service.getFacilities = function() {
return $resource(url);
};
如果我开始使用NG-和$scope.selectedFacility.imeanit=facilities[0];
selectedFacility.imeanit
模型,它按预期工作
正如我在写这个问题,我想到尝试'selectedFacility.imeanit'而不是'selectedFacility'。它似乎解决了这个问题。我记得Javascript是用闭包的方式工作的 - 但我会好奇的学习它是如何应用在这里的...... – Felix
我嘲笑你的[这个笨蛋]的例子(http://plnkr.co/edit/WznqxKg8kdrQua7gBYuf?p=预览),它对我来说工作得很好。你能提供你使用的角度版本的更多细节吗? – tavnab
有趣...我正在使用1.4(和你一样)。也许不同之处在于设施对象列表是通过提供者服务检索的。也就是说,service.getFacilities = function(){return $ resource(url); }; and in controller, $ scope.facilities = facility.getFacilities()。query(function(facilities){$ scope.selectedFacility = facilities [0];}); (我不知道是否有一个更可读的方式来显示代码在SO评论 – Felix