我有一个包含员工列表的选择框。当我选择一个时,我需要第一个&在输入字段中插入姓氏。现在,当我选择一个[对象对象]出现在输入字段
<div class="input-group">
<span class="input-group-addon">J. TESPM</span>
<input style="width:150px" ng-model="currentItem.TESPM" class="form-control" type="text">
<span class="input-group-addon">J. TESPM</span>
<select class="form-control" ng-options="employee as employee.EmployeeFirstName + ' ' + employee.EmployeeLastName for employee in employeeArray | filter:{EmployeeIsPM : true}" ng-model="currentItem.TESPM">
<option value="" disabled>Select</option>
</select>
</div>
如果我理解正确,你想选择你在下拉菜单中显示的相同字符串。如果是这种情况,只需将select更改为this。
<select class="form-control" ng-options="employee.EmployeeFirstName + ' ' + employee.EmployeeLastName as employee.EmployeeFirstName + ' ' + employee.EmployeeLastName for employee in employeeArray | filter:{EmployeeIsPM : true}" ng-model="currentItem.TESPM">
<option value="" disabled>Select</option>
</select>
您观察到的行为是预期的。绑定正常。您在输入字段中看到[Object Object]是因为您将一个对象"链接"到它。输入字段通过调用toString
方法来显示您的对象,该方法返回字符串'[object object]'。
你有不同的选择来解决你的问题:
- 保持将输入字段绑定到Employee对象,并为其定义一个自定义toString方法
- 将输入字段绑定到另一个模型。为了保持两个模型同步,你可以使用ng-change指令选择并更新输入字段的模型。
下面是第一个选项的示例:http://plnkr.co/edit/0xr67FhtXYP6FsVteVsv
控制器代码如下:
angular.module('myApp', [])
.controller('ctrl', function ($scope) {
$scope.employeeArray = [
{
EmployeeFirstName: 'James',
EmployeeLastName: 'Bond'
},
{
EmployeeFirstName: 'King',
EmployeeLastName: 'Georges'
}
];
function Employee (fn, ln) {
this.EmployeeFirstName = fn;
this.EmployeeLastName = ln;
}
Employee.prototype.toString = function () {
return this.EmployeeFirstName + ' ' + this.EmployeeLastName;
};
$scope.secondArray = [
new Employee('James', 'Bond'),
new Employee('King', 'Georges')
];
});
您必须在<input>
类型文本中使用另一个ng-model
,而不是为<select>
使用相同的模型。使用ng-change()
指令来检测<select>
的变化,然后为输入的ng-model
指定所选项目的适当值。
演示strong>