Bootstrap 在复杂对象列表上提前输入
Bootstrap Typeahead on list of complex object
我有动态显示输入字段的表单,这意味着为特定客户显示不同的输入字段。序列和显示的输入字段由数据库驱动。对于每个输入文件,我都想提前打字。完整的表格用下面的对象表示:
{
attributes:Array[9]
s_Id:1376
name:"test_name"
c_Id:512
active:true
created:"2016-11-28T09:47:35.000+0000"
updated:"2016-12-05T14:52:17.649+0000"
valid:Moment
}
关于输入文件的所有信息都存储在数组属性中,它是如下所示的对象列表。在这个对象中有一个数组 attvalue,它显示了为这个特定字段插入的所有以前的值,这实际上是特定输入字段的预输入。
{
attributeId:138
attributevalueId:618
c_Id:512
s_Id:1376
attvalue:Array[4]
0:"Typeahead value 1"
1:"Typeahead value 2"
2:"Typeahead value 3"
3:"Typeahead value 4"
language:"en"
updatedAt:"2016-12-05T14:52:17.649+0000"
created:"2016-11-28T09:47:35.000+0000"
}
在视图中,我遍历属性数组以显示表单。为了显示提前输入,我输入了 HTML 元素:
typeahead="attvalue as object.attvalue for object in object attributes| limitTo:100" ng-maxlength="45" autocomplete="off"
这没有显示适当的值,对于特定的 typeahead 应该这样显示(以 JS 方式编写):
object.attributes:Array[10].attvalue=["Typeahead value 1", "Typeahead value 2", "Typeahead value 3", "Typeahead value 4"]
如何解决这个问题?更好的解决方案是在视图中解决它,然后更改完整的控制器。
我找到了解决这个问题的方法。首先,可以制作非常复杂的列表和对象等,并且仍然使用 bootstrap typeahead,因为我已经看到了很多简单的例子。首先,我添加了数组 attvalues 来列出 attributevalueList 并且 属性 attvalue 仅用于 ng-model 指令的最终值。列表中的新对象如下所示:
object.attributes:Array[1].attvalues:
{
attributeId:138
attributevalueId:618
c_Id:512
s_Id:1376
attvalue:""
attvalues:Array[4]
0:"Typeahead value 1"
1:"Typeahead value 2"
2:"Typeahead value 3"
3:"Typeahead value 4"
language:"en"
updatedAt:"2016-12-05T14:52:17.649+0000"
created:"2016-11-28T09:47:35.000+0000"
}
我已将视图中的打字更正如下:
typeahead="attvalues for attvalues in object.attributevalueList[$index].attvalues | limitTo:100" ng-maxlength="45" autocomplete="off">
我有动态显示输入字段的表单,这意味着为特定客户显示不同的输入字段。序列和显示的输入字段由数据库驱动。对于每个输入文件,我都想提前打字。完整的表格用下面的对象表示:
{
attributes:Array[9]
s_Id:1376
name:"test_name"
c_Id:512
active:true
created:"2016-11-28T09:47:35.000+0000"
updated:"2016-12-05T14:52:17.649+0000"
valid:Moment
}
关于输入文件的所有信息都存储在数组属性中,它是如下所示的对象列表。在这个对象中有一个数组 attvalue,它显示了为这个特定字段插入的所有以前的值,这实际上是特定输入字段的预输入。
{
attributeId:138
attributevalueId:618
c_Id:512
s_Id:1376
attvalue:Array[4]
0:"Typeahead value 1"
1:"Typeahead value 2"
2:"Typeahead value 3"
3:"Typeahead value 4"
language:"en"
updatedAt:"2016-12-05T14:52:17.649+0000"
created:"2016-11-28T09:47:35.000+0000"
}
在视图中,我遍历属性数组以显示表单。为了显示提前输入,我输入了 HTML 元素:
typeahead="attvalue as object.attvalue for object in object attributes| limitTo:100" ng-maxlength="45" autocomplete="off"
这没有显示适当的值,对于特定的 typeahead 应该这样显示(以 JS 方式编写):
object.attributes:Array[10].attvalue=["Typeahead value 1", "Typeahead value 2", "Typeahead value 3", "Typeahead value 4"]
如何解决这个问题?更好的解决方案是在视图中解决它,然后更改完整的控制器。
我找到了解决这个问题的方法。首先,可以制作非常复杂的列表和对象等,并且仍然使用 bootstrap typeahead,因为我已经看到了很多简单的例子。首先,我添加了数组 attvalues 来列出 attributevalueList 并且 属性 attvalue 仅用于 ng-model 指令的最终值。列表中的新对象如下所示:
object.attributes:Array[1].attvalues:
{
attributeId:138
attributevalueId:618
c_Id:512
s_Id:1376
attvalue:""
attvalues:Array[4]
0:"Typeahead value 1"
1:"Typeahead value 2"
2:"Typeahead value 3"
3:"Typeahead value 4"
language:"en"
updatedAt:"2016-12-05T14:52:17.649+0000"
created:"2016-11-28T09:47:35.000+0000"
}
我已将视图中的打字更正如下:
typeahead="attvalues for attvalues in object.attributevalueList[$index].attvalues | limitTo:100" ng-maxlength="45" autocomplete="off">