我正在運行一個應用程序,其中導航包括觸發狀態更改的多語言鏈接。使用UI解決陣列在每次狀態變化時都會被重複使用UI-Router
我遇到的問題是,在從一種語言到另一種語言的每種狀態變化中,來自狀態解析的數組都會被複制。
例如:
- 首先負載= 8項
- 第一狀態變化= 16項
- 第二狀態變化= 24項
- ...
I」我創建了一個Plunker to replicate the issue。
這裏是我的狀態代碼:
.config(function($stateProvider) {
$stateProvider.state('fair', {
url: '/fair/{fair}',
resolve: {
fair: function(SearchService, $stateParams) {
var string = $stateParams.fair.replace(/-/g , "");
var finalstring = string.replace(/liste/g , " ");
return SearchService.getAllExhibitors(finalstring);
}
},
views: {
'header': {
templateUrl: 'header.htm',
controller:'appCtrl'
},
'main':{
templateUrl: 'fair.htm',
controller: 'appCtrl'
}
}
})
.state('fairde', {
url: '/de/fair/{fair}',
resolve: {
fair: function(SearchService, $stateParams) {
var string = $stateParams.fair.replace(/-/g , "");
var finalstring = string.replace(/liste/g , " ");
return SearchService.getAllExhibitors(finalstring);
}
},
views: {
'header': {
templateUrl: 'headerde.htm',
controller:'appCtrl'
},
'main':{
templateUrl: 'fairde.htm',
controller: 'appCtrl'
}
}
})
,工廠:
.factory("SearchService", function($http, $q) {
var service = {
flatexhibitors : [],
datafairs : [],
getAllExhibitors : function (wop) {
var deferred = $q.defer();
var searchindex = wop;
var url = '../register/backend/databaseconnect/getexhibitors.php';
var config = {
params: {
search: searchindex
},
cache:true
};
$http.get(url, config).then(function (data) {
service.datafairs = data.data.rows;
for (var i in service.datafairs) {
service.flatexhibitors.push(service.datafairs[i].doc);
};
deferred.resolve(service.flatexhibitors);
}, function (error) {
console.log(error);
deferred.reject(error);
});
return deferred.promise;
}
}
return service;
})
不明白爲什麼你需要2個獨立的陣列,不只是返回'數據在'then()'中使用.data.rows' – charlietfl