2016-05-01 51 views
1

我正在使用Angular UI typeahead指令。我有一个人在列表中的列表。人员列表是一组具有诸如LastName,FirstName,CustomerNumber等属性的对象(请注意,我的域是完全不同的,并且这是为了清晰起见的简化)。一切工作正常,如果我有以下预输入控制:Angular UI typeahead在选择时不填充文本框

<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); 
} 

但我不应该这样做,我应该?我错过了什么,或者我偶然发现了一个错误?

回答

1

请尝试如下所示。

<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" /> 
+1

谢谢。它不仅解决了我的问题,而且实际上产生了更好的模型。我显然需要更好地理解'select'指令语法! – Felix

+0

热烈欢迎您:) – Sampath

+0

Sampath,如果您不介意的话,您能指点我一个地方,这个语法记录在哪里? Angular UI *引用*“作为sourceArray中的值选择标签” - 但我无法找到它将进入实际定义的位置......提前致谢! – Felix