我正在处理一个遗留的Angular Formly表单,我有一个下拉列表的选择formly-template字段。
<select class="form-control" placeholder="choose ..." ng-model="model[options.key]"
ng-options="option.value as option.name group by option.group for option in options.templateOptions.options">
</select>
不幸的是,我正在更新的应用程序有很多静态选项的例子,但我需要把它绑定到一个动态列表。
我设法添加了一个新的字段类型来扩展select,并试图将Desc映射为name,将Code映射为value,但没有如我所愿。
formlyConfigProvider.setType({
name: 'specialselect',
templateUrl: getFieldTemplateUrl('select'),
wrapper: commonWrappers,
defaultOptions: {
defaultValue: "",
expressionProperties: {
'templateOptions.options': function ($viewValue, $modelValue, scope) {
if (!scope.model.SomeObject.ItemCollection) {
return [];
}
var defaultOption = [{ name: 'Choose ...', value: '' }];
return _.union(defaultOption, _.map(scope.model.SomeObject.ItemCollection, function (value) {
return { name: value.Desc, value: value.Code };
}));
}
}
}
});
忽略未定义的部分,我已经在代码中进行了修正,现在我的列表中包含了。
问题1:我不知道为什么我的值里看到的是string:JEEP,而不是JEEP。
更新:所以我找到了其他的帖子,关于Angular做了一些事情来创建一个独特的键,这就是为什么它的值与类型的前缀。 但是我不希望这样,因为我就必须在保存对象之前把它剥离出来。 有什么最有效的方法可以将值的类型剥离出来?或者有什么更好的方法来定义我的字段,使它没有这种行为。
问题2:如何使这个动态的,使我可以传递包含我的项目集合的模型属性。 而不是使用:
scope.model.SomeObject.ItemCollection
原来我可以忽略值前的类型。 似乎可以适当地忽略它。
另外对于我的动态列表绑定我的选择字段,我需要设置。
"expressionProperties": {
"templateOptions.options": "model.SomeObject.ItemCollection"
}