对象数组?

Typeahead Array of Objects?

我在理解 AngularUI Bootstrap 的 Typeahead 指令时遇到一些问题。在他们的 statesWithFlags 对象数组示例中,他们不一定解释指令表达式在说什么。

state as state.name for state in statesWithFlags | filter:{name:$viewValue}

Link: http://angular-ui.github.io/bootstrap/#/typeahead

他们两次使用状态,有人可以向我解释一下吗?以及解释过滤器到底在说什么?

例如,当我尝试创建一个包含对象数组的对象并使用 Typeahead 检查该数据时,我似乎无法访问任何数据。

JSON

$scope.dataExample = {
  'students' : [
    {
      'id': 1,
      'name': 'John Doe'
    },
    {
      'id': 2,
      'name': 'Jane Doe'
    }
  ]
};

HTML

<input type="text" ng-model="selectedStudent" typeahead="student as students.name for student in dataExample | filter:{name:$viewValue}">

此预输入表达式与 ngSelect 上的 ngOptions 语法相同(有关此博客的更多信息:http://www.undefinednull.com/2014/08/11/a-brief-walk-through-of-the-ng-options-in-angularjs/)。

本质上是列表理解。您正在为 typeahead 提供一个列表,用于填充选项、在 selected 时将模型值设置为的对象,以及选项应如何显示,语法如下:

modelValue as display for iterationItem in list

你的问题是 "in dataExample" 部分需要一个数组,但你给了它对象(你可以给它一个对象,但这不是你想要做的)。你想要:

<input type="text" ng-model="selectedStudent" typeahead="student as student.name for student in dataExample.students | filter:{name:$viewValue}">

至于你的另一个问题,过滤器只是过滤预先输入应该显示的选项。 $viewValue 是一个 属性 typeahead 设置为用户输入的任何内容,过滤器将 select 仅匹配该子字符串的选项。