複数の 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;
}
});
助けていただければ幸いです。