我正在Angular中創建一個控制器,我得到的url部分和一些參數與$statePrams
。通過角度生成的字符串訪問JSON對象
我打電話給$http
服務從json文件中取回數據。獲取數據後,我將指定的對象元素的內容(從$stateParams
生成)指定給一個$scope
變量,我可以在該視圖中處理這些變量以生成某種無序列表元素。
我的問題是,當我生成例如路徑爲result['data']['datas']['timeline']
,那麼它將無法正常工作,並給我ngRepeat:dupe
錯誤。
但是根本沒有重複。如果我只是像$scope.naviData = result['data']['datas']['timeline'];
那樣手動輸入它,它會生成對象,給我所有需要的數據並在視圖中繪製li
元素。
我怎麼能解決這個問題,因爲我不知道如何做這個動態的對象元素訪問,否則。這裏有兩個圖像:
第二個是與動態地生成的可變 在兩者情況下的第一console.info
是狀態PARAMS我生成從路徑。另外這裏是代碼爲我做的魔術部分。
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);
});
});
另外,如果我在視圖中使用track by $index
它只會產生從我的生成路徑的信li
元素。
謝謝,但問題是不同的,我相信。此外,作爲回報,我應該得到: '「時間軸」:{ 「暴風雨開始」:「1969年至2164年」, 「要大膽去」:「2188年至2379年」, 「黃金時代」 :「2380 - 2393」 }'。 另外在我看來,我用'ng-repeat =「(url,name)在naviData」'中工作,在那裏我可以通過url使用track,但它仍然給我錯誤,就像我在原始文章中提到的那樣。 – CreativeZoller