2016-07-08 3 views
3

Bitte überprüfen Sie den Kolben. Ich bin nicht in der Lage, die Daten zu binden, die von Server wie diesem (["Monday","Tuesday"]) kommen.Es ist nicht möglich, Daten an dropdown-multiselect in angularjs zu binden

I-Daten wissen bindet, wenn es wie

$scope.selectedUser = [{ id: 2, name: 'Monday' }, 
         {id: 3,name:'Tuesday'}];. 
ist

ich ["Monday","Tuesday"] zu [{ id: 2, name: 'Monday' },{id: 3,name:'Tuesday'}] in Javascript machen möchten, so dass sie in Drop-Down binden würde.

Bitte helfen Sie mir, dieses Problem zu lösen.

demo plunker

+1

, was Sie tun wollen? –

Antwort

1
//This is the ng filter to create id as you get the data from server 
app.filter('createId',function(){ 
    return function(arr){ 
     var result = []; 
     for(var i = 0;i < arr.length;i++){ 
      var id = arr[i].substring(0,3); 
      var obj = {'id':id,'name':arr[i]}; 
      result.push(obj); 
     } 
     return result; 
    } 
}); 

//In js controller you can costomize your array of user by using ng-filter like this 
$scope.users = $filter('createId')($scope.users); 
//This is because index will be changed every time so this can't be used as ID 
$scope.selectedUser = $filter('createId')($scope.selectedUser); 
+0

Vielen Dank .. Dies funktioniert –

1

Sie können dies tun

$scope.selectedUsers=[]; 
//serverData is data from server 
for(var i =0 ; i < serverData.length ; i++){ 
    $scope.selectedUsers.push({id:i , name: serverData[i]}) 
} 

Und in Ihrem Winkel

$scope.doSelectedUser = function() { 
    $scope.selectedUser = $scope.selectedUsers; 
} 
1

$scope.selectedUser einen Verweis auf den eigentlichen Objekten in $scope.users haben sollte. zum Beispiel ist es das, was musste ich in Ihrem Plunker ändern sie zu binden, mit der Benutzer die Liste der Benutzernamen entsprechen:

var defaultSelectedUsers = ["Sunday","Tuesday"]; 

$scope.users = [ 
    { id: 1, name: 'Sunday' }, 
    { id: 2, name: 'Monday' }, 
    { id: 3, name: 'Tuesday' } ]; 

$scope.selectedUser = $scope.users.filter(function(user){ 
    return defaultSelectedUsers.indexOf(user.name) != -1; 
}); 

Online Demo - http://plnkr.co/edit/3TOkZEaZVSxtpNbFaNkg?p=preview


Sie erwähnten Sie wollen Mach es von der Antwort deines Servers. Es ist unklar, wie Sie entscheiden möchten, welche ausgewählt werden soll, vorausgesetzt, Sie verlassen sich auf einen standardmäßigen Namen für ausgewählte Benutzer gemäß Ihrem Beispiel.

Dies ist, wie Sie die neuen ausgewählte Benutzer eines Servers Antwort und ändern behandeln:

var defaultSelectedUsers = ["Sunday","Tuesday"]; 

$http.get('/api/v1/users') 
    .success(function(users)){ 
     $scope.users = users; 

     $scope.selectedUser = users.filter(function(user){ 
      return defaultSelectedUsers.indexOf(user.name) != -1; 
     }); 
    }); 

Sie können die Filterbedingung ändern, was Sinn macht für Sie

+0

Obwohl ich die Antwort von vorherigen Kommentar bekam, ist dies auch sehr hilfreich und einfach .. Vielen Dank –

1

Ihre json unter Code Achieve

var temp = ["Monday", "Tuesday"] 
var result = "["; 
for (var i = 0; i < temp.length; i++) { 
if(i!=temp.length-1) 
{ 
    result += "{id:'" + i + "',name:'" + temp[i] + "'},"; 
} 
else 
{ 
    result += "{id:'" + i + "',name:'" + temp[i] + "'}"; 
} 
    alert(result); 
} 
console.log(result+"]") 
Verwandte Themen