Как заполнить параметрами angular ui-select после обещания?

#javascript #angularjs #angular-ui #angular-promise #ui-select

#javascript #angularjs #angular-пользовательский интерфейс #angular-обещание #пользовательский интерфейс-выберите

Вопрос:

У меня есть html

  <ui-select multiple ng-model="item.selectedOrganizations" theme="bootstrap" ng-disabled="disabled" sortable="true" close-on-select="false">
        <ui-select-match placeholder="Select organizations...">{{$item.Name}}</ui-select-match>
        <ui-select-choices repeat="organization.Name as organization in organizationsDB | propsFilter: {Name: $select.search}">
                <div ng-bind-html="organization.Name | highlight: $select.search"></div>
        </ui-select-choices>
 </ui-select>
  

У меня уже есть кое-что в item.selectedOrganizations, поэтому я предварительно заполню поле выбора некоторыми значениями. Массив имен.

 item.selectedOrganizations = selectedOrganizations;
  

Я заполню параметры поля выбора некоторыми данными.

 $http.get('/admin/organizations')
    .success(function(data){
        vm.organizationsDB = data.data;
});
  

Пока все работает, но, конечно, я должен объявить переменные:

  vm.organization = {};
 // vm.organizationsDB = [];
  

Если я оставлю комментарий, поле выбора будет работать, но с ошибками в консоли. Если я удалю комментарий и сначала объявлю переменную organizationsDB, ошибок в синтаксисе не будет, но item.selectedOrganizations не будет предварительно заполнен массивом имен.

Кто-нибудь может мне помочь в этом вопросе?

Ответ №1:

Ваше представление немного неверно, я предполагаю, что вы скопировали из примера и не совсем связали его с вашей собственной реализацией.

Я думаю, что я рассмотрел вашу проблему ниже (скрипка здесь:http://jsfiddle.net/qmf49qo3 /). Я добавил литерал поддельного объекта вместо вашего ответа на обещание.

Вид

 <div ng-app="app" ng-controller="myCtrl as vm">
  <ui-select tagging ng-model="vm.selectedOrganizations" theme="bootstrap">
    <ui-select-match placeholder="Pick one...">{{$select.selected.value}}</ui-select-match>
    <ui-select-choices repeat="val as organization in vm.organizationsDB  | filter: $select.search track by organization.value">
      <div ng-bind="organization.value | highlight: $organization.search"></div>
    </ui-select-choices>

  </ui-select>
</div>
  

Модель

 var app = angular.module('app', ['ui.select']);

app.controller("myCtrl", function() {
  vm = this;
  vm.isLoaded = false;
  vm.organizationsDB = [{
    'key': 1,
    'value': 'IBM'
  }, {
    'key': 2,
    'value': 'Microsoft'
  }];
  vm.selected;
  vm.selectedOrganizations = {
           'key': 1,
           'value': 'Prepopulated Value'
           }
});
  

Комментарии:

1. Я понимаю вашу точку зрения. Но ng-модель — это item.selectedOrganizations (что означает, что у меня есть несколько элементов). И я не хочу создавать его vm.selectedOrganizations = empty. У меня там уже есть некоторые значения.