Javascript 角度-选择框-从控制器设置所选条目
我有一个选择框,定义如下:Javascript 角度-选择框-从控制器设置所选条目,javascript,angularjs,Javascript,Angularjs,我有一个选择框,定义如下: <select ng-model="selectedSupplier" ng-options="supplier.name for supplier in suppliers"> </select> 但我将函数更改为这样,它仍然设置选项,但所选选项是新的空白选项,没有我定义的选项: $scope.foo = function() { var foos = [{"id":1,"name":"No 1"},{"id":2,"name"
<select ng-model="selectedSupplier" ng-options="supplier.name for supplier in suppliers">
</select>
但我将函数更改为这样,它仍然设置选项,但所选选项是新的空白选项,没有我定义的选项:
$scope.foo = function() {
var foos = [{"id":1,"name":"No 1"},{"id":2,"name":"No 2"},{"id":3,"name":"No 3"},{"id":4,"name":"No 4"}];
$scope.suppliers = foos;
$scope.selectedSupplier = {"id":3,"name":"No 3"};
}
这是怎么回事?如何使用原始对象以外的对象设置所选选项?
ngOptions
指令以不同方式处理数组和对象:这是一个平等/身份问题。文字
$scope.selectedSupplier = {"id":3,"name":"No 3"};
与foos数组中的对象不同。虽然它们包含相同的数据,但它们是两个不同的引用
$scope.selectedSupplier === foos[2] // false
在第一个示例中,您正确地引用了数组中的对象
$scope.selectedSupplier = foos[2];
在这方面:
$scope.selectedSupplier = {"id":3,"name":"No 3"};
您正在将独立对象分配到$scope.selectedSupplier
,该对象不在选项列表中。在幕后没有深入的比较——对于复杂对象,必须指定实际对象本身
例如,如果希望基于id属性指定选定值,请使用以下代码:
var idToAssign = 2;
for (var i = 0; i < $scope.suppliers.length; i++) {
var curSupplier = $scope.suppliers[i];
if (curSupplier.id == idToAssign) {
$scope.selectedSupplier = curSupplier;
break;
}
}
var idToAssign=2;
对于(变量i=0;i<$scope.suppliers.length;i++){
var curSupplier=$scope.suppliers[i];
if(curSupplier.id==idToAssign){
$scope.selectedSupplier=curSupplier;
打破
}
}
我尝试删除对象键(id
非“id”
)周围的“
),因为它在javascript中不是必需的,而且有效
$scope.foo = function() {
var foos = [{id:1,name:"No 1"},{id:2,name:"No 2"},{id:3,name:"No 3"},{id:4,name:"No 4"}];
$scope.suppliers = foos;
$scope.selectedSupplier = {id:3,name:"No 3"};
};
如果删除引号没有问题,那么这可能是一个解决方案您是否可以从列表中查找对象(按id或名称匹配)然后用它来设置selectedSupplier?否则,如果你创建了一个新对象,它们将不匹配,也不会被选中。谢谢你的提示。因为问题显示了一个MCVE,而我遇到相同问题的真实应用程序从服务器接收到一个JSON响应,所以我更喜欢保留引号,因为服务器响应已经关闭您可以将json数据解析为简单的javascript对象,如
json.parse('{“Id”:1,“Name”:“No 1”}')
,它将生成{Id:1,Name:“No 1”}
$scope.foo = function() {
var foos = [{id:1,name:"No 1"},{id:2,name:"No 2"},{id:3,name:"No 3"},{id:4,name:"No 4"}];
$scope.suppliers = foos;
$scope.selectedSupplier = {id:3,name:"No 3"};
};