将 Angular 正式 select 绑定到模型 属性 的选项

Binding Angular Formly select to a model property for its options

我正在处理旧版 Angular Formly 表单,我有一个 select 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 映射到名称并将代码映射到值,但它没有像我希望的那样工作。

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

原来我可以忽略值前缀的类型。好像适当忽略了。

另外,对于我需要设置的 select 字段的动态列表绑定:

"expressionProperties": {
  "templateOptions.options": "model.SomeObject.ItemCollection"
}