为其选项绑定Angular Formly选择到一个模型属性。

问题描述 投票:0回答:1

我正在处理一个遗留的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 };
                        }));
                }
            }
        }
    });

忽略未定义的部分,我已经在代码中进行了修正,现在我的列表中包含了。enter image description here

问题1:我不知道为什么我的值里看到的是string:JEEP,而不是JEEP。

更新:所以我找到了其他的帖子,关于Angular做了一些事情来创建一个独特的键,这就是为什么它的值与类型的前缀。 但是我不希望这样,因为我就必须在保存对象之前把它剥离出来。 有什么最有效的方法可以将值的类型剥离出来?或者有什么更好的方法来定义我的字段,使它没有这种行为。

问题2:如何使这个动态的,使我可以传递包含我的项目集合的模型属性。 而不是使用:

scope.model.SomeObject.ItemCollection
angular-formly
1个回答
0
投票

原来我可以忽略值前的类型。 似乎可以适当地忽略它。

另外对于我的动态列表绑定我的选择字段,我需要设置。

"expressionProperties": {
  "templateOptions.options": "model.SomeObject.ItemCollection"
}
© www.soinside.com 2019 - 2024. All rights reserved.