Ui-Router上解析的功能的时序或顺序不正确



>我有一个应用程序,我的主要状态在其中解析了 http 调用并获取了一个数组。

然后,子数组应该显示该数组中的一个对象,但似乎来自控制器的变量定义得太早并且没有正确更新,因此子数组为空。

我已经尝试过没有http调用(var array = [array](,它工作正常,但不适用于http调用。

关于如何解决此问题的任何提示?

以下是控制器:

.controller('appCtrl',['$scope', 'SearchService','fair', function($scope, SearchService, fair){
$scope.data = SearchService;
$scope.datafairs = $scope.data.flatexhibitors;
console.log($scope.datafairs);
}])
.controller('ChildController',['$scope', 'exhibitor', '$filter', function($scope, exhibitor, $filter){
$scope.$watch(function() { return $scope.fair; }, function(newVal) { 
$scope.fairs = newVal;
console.log($scope.fairs);
$scope.chosenexhibitor = $filter("filter")($scope.fairs, {'slug':exhibitor}, true);
}, true);

}])

服务内容:

.factory("SearchService", function($http) {  
var service = {
flatexhibitors : [],
datafairs : [],
getAllExhibitors : function (wop) {
var searchindex = wop;
console.log(searchindex);
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);
};
return service.flatexhibitors;
});
}   
}
return service;
})

和各州:

.config(function($stateProvider) {

$stateProvider.state('berliner', {
url: '/berlinerliste',
params : {search: 'Berliner 2017'},
resolve: {
fair: function(SearchService, $stateParams) {
return SearchService.getAllExhibitors($stateParams.search);
}
},
views: {
'header': {   
templateUrl: 'header.htm'   
},
'main':{    
templateUrl: 'bl2017.htm',
controller: 'appCtrl'
}    
}
})
.state('berliner.exhibitor', {
url: '/{id}', 
resolve: {
exhibitor: function($stateParams) {
var slug = $stateParams.id;
return slug;
}
},
views: {
'header': {   
templateUrl: 'header.htm'   
},
'wop':{    
templateUrl: 'exhibitor.htm',
controller: 'ChildController'
}    
}
})
})

我已经设法在 Plunkr 中复制了这个问题。

更改getAllExhibitors以返回如下所示的promise

getAllExhibitors : function (wop) {
var searchindex = wop;
console.log(searchindex);
var url = '../register/backend/databaseconnect/getexhibitors.php';
var config = {
params: {
search: searchindex
},
cache:true
};
return $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);
};
return service.flatexhibitors;
});
}

最新更新