Ich erstelle einen Controller in Angular, für die ich die URL-Teile und einige Parameter mit $statePrams
erhalten.Zugriff auf JSON-Objekt durch generierte Zeichenfolge in Angular
Ich rufe den Service $http
, um Daten aus einer JSON-Datei zurück zu bekommen. Nach dem Abrufen der Daten weise ich den Inhalt des angegebenen Objektelements, dessen Spezifikation von $stateParams
generiert wird, einer $scope
-Variable zu, die ich aus meiner Sicht verarbeiten kann, um eine Art von ungeordneten Listenelementen zu erzeugen.
Mein Problem ist, wenn ich zum Beispiel den Pfad als result['data']['datas']['timeline']
generieren, dann wird es nicht funktionieren, und geben Sie mir ngRepeat:dupe
Fehler.
Allerdings gibt es keine Duplikate. Wenn ich es manuell wie $scope.naviData = result['data']['datas']['timeline'];
eintippe, wird es das Objekt erzeugen, mir alle benötigten Daten geben und die li
Elemente in der Ansicht zeichnen.
Wie könnte ich dieses Problem lösen, da ich nicht weiß, wie sonst dieser dynamische Objektelementzugriff funktioniert. Hier sind zwei Bilder:
Erste ist mit manuellem Schreib
zweiter mit dynamisch generierte Variable Die ersten console.info
in beiden Fällen sind die staatlichen params I erzeugen, um den Weg aus . Auch hier sind die Codes, die den magischen Teil für mich machen.
angular.module('MPWeb.datas', [])
.controller('DataDetailsCtrl', function($scope, $state, $stateParams, $http) {
$scope.params = $stateParams;
// set datas for dynamic object handling
var base = 'data.datas';
var category = ($scope.params.categoryId) ? $scope.params.categoryId : '';
var article = ($scope.params.articleId) ? $scope.params.articleId : '';
var stateConfig = (article) ? {
params: {
prefix: base,
categoryId: category,
articleId: article
}
} : {
params: {
prefix: base,
categoryId: category
}
};
console.info(stateConfig.params); // this is the first console entry on the screenshots
// with this function I get back a standard joined string
var objToString = function(obj) {
var tabjson = [];
for (var p in obj) {
if (obj.hasOwnProperty(p)) {
tabjson.push(obj[p]);
}
}
tabjson.push()
return tabjson.join('.');
};
// generate sideNavigation
$http({
method: 'GET',
url: './json/mp-navigation.json'
}).then(function successCallback(result, status, headers) {
var temp = objToString(stateConfig.params);
var naviTemp = (stateConfig.params.articleId) ? temp.replace(/\.[^.]+$/, "") : temp;
naviTemp = "result['" + naviTemp + "']";
naviTemp = naviTemp.replace(/\./g, "']['"); // dynamically generated path with bracket notation method
//$scope.naviData = naviTemp; // if I use this, it gives me the error
$scope.naviData = result['data']['datas']['timeline'];
console.info(naviTemp);
}, function errorCallback(result, status, headers) {
console.warn(status);
});
});
Auch wird es nur li
Elemente aus den Briefen meines erzeugten Pfades erzeugen, wenn ich track by $index
meiner Meinung nach verwenden.
Danke, aber das Problem ist anders Ich bin sicher.Auch dafür sollte ich folgendes bekommen: '" timeline ": { " stürmische Anfänge ":" 1969 - 2164 ", " to-boldly-go ":" 2188 - 2379 ", " goldene Zeitalter " : "2380 - 2393" } '. Auch ich arbeite sie mit 'ng-repeat =" (URL, Name) in naviData "', wo ich Track by mit URL verwenden kann, aber es gibt mir immer noch die Fehler, wie ich in meinem ursprünglichen Beitrag erwähnt habe. – CreativeZoller