Angular UI typeahead 不在选择时填充文本框

Angular UI typeahead doesn't populate textbox upon selection

我正在使用 Angular UI typeahead 指令。我有一份预先输入保管箱中的人员名单。人员列表是一个对象数组,具有 LastNameFirstNameCustomerNumber 等属性(请注意,我的域完全不同,为了清楚起见,这是一种简化) .如果我有以下预输入控件,一切正常:

<input type="text" ng-model="vm.selectedCustomer"
    typeahead-append-to-body="true"
    uib-typeahead="i.LastName for i in vm.lstCustomers | filter:$viewValue" />

但是,我想在预输入保管箱中显示更多客户信息。比方说,我在控制器中有一个函数:

vm.getFullName = function(customer) {
    return customer.LastName + ", " + customer.FirstName + " - " + customer.CustNumber;
    }

和相应的指令:

<input type="text" ng-model="vm.selectedCustomer"
    typeahead-append-to-body="true"
    uib-typeahead="vm.getFullName(i) for i in vm.lstCustomers | filter:$viewValue" />

一旦做出选择,模型就会正确填充;然而文本框显示 undefined, undefined - undefined(奇怪的是,结构看起来像 getFullName() 被应用到一个空值 - 用逗号和破折号)。

如果我遍历 lstCustomers 的每个元素并应用 getFullName(),一切看起来都很好:

var lstCustomersFlat = [];
for (i = 0; i < vm.lstCustomers.length; i++) {
  var customer = vm.getFullName(vm.lstCustomers[i]);
  lstCustomersFlat.push(customer);
}

但我不应该那样做,不是吗?我是不是遗漏了什么,或者我偶然发现了一个错误?

请尝试如下图

<input type="text" ng-model="vm.selectedCustomer"
    typeahead-append-to-body="true"
    uib-typeahead="i as vm.getFullName(i) for i in vm.lstCustomers | filter:$viewValue" />