Domanda

Ho un select2 angolare come segue:

<select ui-select2 id="clientID" name="clientID" ng-model="newTicket.clientstate" ng-required="true">
    <option ng-repeat="item in clients track by item.id" value="{{item.clientID}}|{{item.stateID}}" >{{item.displayName}}</option> 
</select>

nel mio controller, i client sono impostati in questo modo (chiamando un servizio che restituisce $promise da $resource):

TicketService.getClients().then(
    function(clients) {
        $scope.clients = clients;
    }
);

Ho anche impostato il valore iniziale di $scope.newTicket.clientstate nel controller.Poiché la chiamata a $resource è asincrona, l'impostazione del valore iniziale avviene prima che la query venga risolta.

Sto cercando di fare in modo che il menu a discesa compili un valore iniziale ("DEMO|DEMO") al termine della chiamata API.Penso che la soluzione sia una delle 3 cose:impostando ng-init su select, impostando ng-selected su ng-repeat o facendo qualcosa in .then() che si verifica dopo che l'API restituisce la query.Tuttavia, non riesco a far funzionare la sintassi corretta e speravo di ricevere qualche consiglio su come procedere.

Il mio primo tentativo per risolvere le cose (puoi vederlo nei commenti qui sotto) è stato convertire tutto in ng-options, ma la libreria ui-select2 è incompatibile con ng-op[tions, quindi sto cercando un'altra possibilità.

È stato utile?

Soluzione

Mi sono appena imbattuto nella stessa cosa e un ragazzo al lavoro mi ha indicato la giusta direzione.

A quanto pare io e te stavamo cercando di complicare eccessivamente la soluzione.Tutto quello che devi fare è:

TicketService.getClients().then(
    function(clients) {
        $scope.clients = clients;
        // set the default value after the list comes back
        $scope.newTicket.clientstate = 'yourDefaultValue';  
    }
);

Allora dovresti essere a posto!

Assicurati solo di aver inizializzato $scope.newTicket prima di questo, altrimenti riceverai un errore che dice che non puoi accedere alle proprietà di un oggetto non definito.

E lo presumo getClients() restituisce a $promise oggetto?Altrimenti dovrai fare una delle seguenti operazioni:

TicketService.getClients(function(clients){...}))

O:

TicketService.getClients().$promise.then(function(clients){...}))
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top