2015-07-23 25 views
8

próbuję nauczyć kanciasty, i mam kod przykładowy fragment kodu, który jest następujący:Jak można dynamicznie dodawać wartości do JavaScript Object

$scope.contents = [{ 
    name: 'Chris Doe', 
    abbreviation: 'Developer', 
},{ 
    name: 'Ann Doe', 
    abbreviation: 'Commerce', 
},{ 
    name: 'Mark Ronson', 
    abbreviation: 'Designer', 
},{ 
    name: 'Eric Doe', 
    abbreviation: 'Human Resources', 
},{ 
    name: 'John Doe', 
    abbreviation: 'Commerce', 
},{ 
    name: 'George Doe', 
    abbreviation: 'Media', 
},{ 
    name: 'Ann Ronson', 
    abbreviation: 'Commerce', 
},{ 
    name: 'Adam Ronson', 
    abbreviation: 'Developer', 
},{ 
    name: 'Hansel Doe', 
    abbreviation: 'Social Media', 
},{ 
    name: 'Tony Doe', 
    abbreviation: 'CEO', 
}]; 

Które działa dobrze, ale chcę, aby pobrać dane z API, a następnie załaduj dane do $scope.contents. Próbowałem następujące:

$http(req).success(function(res) { 
    console.log(res); 
    for (var i = 0; i < res.length; i++) { 
     console.log(res[i]); 
     //add data into scope contents here .add(res[i]) 
    } 
}).error(function (err) { console.log(err) }); 

i to działa, jestem w stanie pętli przez obiekt danych zwrócony z mojego API, jednak nie mogę dowiedzieć się składni, aby dodać zwracanych danych do $scope.contents Jaka jest właściwa sposób to zrobić? Czy jest lepszy sposób to zrobić? Jak tworzenie $scope.contents klasy i dodawanie danych jako nowej instancji?

+0

Czy możesz udostępnić format danych odpowiedzi. Przykład tego, co wyjdzie "console.log (res [I]);" byłoby świetne. – JRulle

+0

@JRulle 'Object {id: 2, name:" Germany ", skrót:" DE "}' – user4612487

+0

Biorąc pod uwagę ten format, możesz użyć odpowiedzi @ andrewR poniżej, aby osiągnąć to, co chcesz. – JRulle

Odpowiedz

5

Można użyć Array#concat:

$scope.contents = $scope.contents.concat(res); 

Oczywiście najpierw chcesz się upewnić, że $scope.contents jest już tablicą:

if (! Array.isArray($scope.contents)) { 
    $scope.contents = []; 
} 
$scope.contents = $scope.contents.concat(res); 
+0

Cóż, to było naprawdę proste. – user4612487

1

$ scope.contents wygląda tablicy więc ...

$scope.contents.push(res[i]); 
2

$scope.contents to tablica, dzięki czemu można popchnąć nowy cel t do tego.

$http(req).success(function(res) { 
    console.log(res); 
    for (var i = 0; i < res.length; i++) { 
     console.log(res[i]); 
     $scope.contents.push(res[i]); 
    } 
}).error(function (err) { console.log(err) }); 

Z twojego przykładu nie wynika, co zawiera res[i]. Powyższy kod zakłada, że ​​jest to już właściwy obiekt. Jeśli nie, weź to i umieść prawidłowe wartości.

$scope.contents.push({ 
    name: res[i].name, 
    abbreviation: res[i].abbreviation, 
}); // example -- change to match your data 
Powiązane problemy