0

複数の ui-select で angular-formly を使用しており、データが複数選択に読み込まれると、選択しているリストが既に事前選択されている項目 (重複) に追加されます。select.refreshItems() を使用しても役に立ちませんでした。

動作はよくわかりませんが、getBorrowers(parameters) が getBook(id) よりも速く読み込まれると、正しく動作するようです (重複は作成されません)。

私の正式な設定:

formlyConfig.setType({
            name: 'multiple-borrowers',
            template: '<ui-select multiple ng-model="model[options.key]" theme="bootstrap"> <ui-select-match placeholder="{{to.placeholder}}"> {{$item[to.labelProp || \'name\']}} </ui-select-match> <ui-select-choices repeat="option in to.options" refresh="to.refresh($select.search, options)" refresh-delay="{{to.refreshDelay}}"> <div ng-bind-html="option[to.labelProp || \'name\'] | highlight: $select.search"></div> </ui-select-choices> </ui-select>'
        });

私の正式なフォーム:

,{
    key: 'borrowers',
    type: 'multiple-borrowers',
    templateOptions: {
        label: 'Borrowers',
        labelProp: 'title',
        required: true,
        options: [],
        refresh: refreshBorrowers,
        refreshDelay: 0
    },
    controller: function($scope, MyService) {
        var parameters = {limit: 5};
        MyService.getBorrowers(parameters, function(response){
            $scope.to.options = response;
        });
    }
},...


function refreshBorrowers(query, field) {
        var parameters= {
            filter: JSON.stringify({search: query}),
            limit: 5
        };

        MyService.getBorrowers(parameters, function(response){
            field.templateOptions.options = response;
        });  
    }

私のコントローラー:

bindBookData = function(id) {
    MyService.getBook(id, function(response) {
        $scope.model = response;
    });
};

$scope.$on('$stateChangeSuccess', function (e, toState, toParams) {
        if(toState.data && toState.data.action === 'books.detail') {
            bindBookData(toParams.id);
            var form = $controller('BookCtrl');

            $scope.fields = form.formFields;
        }
    });

助けていただければ幸いです。

4

0 に答える 0