В настоящее время я работаю над webapp файлом MEAN, и postPromise, похоже, не работает. Я пытаюсь извлечь данные из своего db и загрузить его как CSV. После небольшой отладки я сузил ее, чтобы postPromise не вызывался (console.log("Посмотрите, ma! я ran"), не запускался.) У меня одинаковый код работает должным образом в другом месте приложения, так что я немного озадачен.
UI-маршрутизатор:
.state('adminDownload', {
url: '/download',
templateUrl: '../../views/admin-download.html',
resolve: {
postPromise: ['users', function(users){
console.log('look, ma! I ran!'); //is not called
return users.getAll();
}]
},
onEnter: ['$state', 'auth', function($state, auth){
if( ! auth.isLoggedIn()){
$state.go('adminLogin');
}
}]
});
пользователи фабрики:
routerApp.factory('users', ['$http', function($http){
var o = {
users: []
};
o.getAll = function() {
console.log('getAll was called');
return $http.get('/users').success(function(data){
angular.copy(data, o.users);
});
};
o.create = function(user) {
return $http.post('/users', user).success(function(data){
o.users.push(data);
});
};
return o;
}]);
index.js, GET users:
/*GET users*/
router.get('/users', function(req, res, next) {
User.find(function(err, users) {
if(err) {
return next(err);
}
console.log('get users called');//is not called
res.json(users);
});
});
Код преобразования CSV, если это действительно проблема, многие вещи закомментированы для целей отладки:
routerApp.controller('AdminCtrl', ['$scope', 'users', 'questions', function ($scope, users, questions){
$scope.getData = function(){
//get the results from user objects
var data = [];
console.log(users.users); //returns '[]'
for (var i = 0; i < users.users.length; i++) {
console.log('the loop got called');// is not called at users.users.length === 0
console.log(users.users[i].results);
$scope.data.push(users.users[i].results);
}
console.log('not in the loop any more :('); //is called
// Convert Object to JSON
var jsonObject = JSON.stringify(data);
var convertToCSV = function(objArray) {
var str = Papa.unparse(objArray);
return str;
}
//console.log($scope.data);
console.log(jsonObject); //returns '[]'
//console.log(convertToCSV(jsonObject));
//download .csv
//window.open( "data:text/csv;charset=utf-8," + escape(convertToCSV(jsonObject)));
};
}]);
общественности/просмотров/админ-greeting.html:
<div ng-app = 'routerApp', ng-controller = 'AdminCtrl'>
<h1>Hello, Friend</h1>
<button ng-click = 'getData()' href = 'data' download>Download Data</button>
</div>
<div ng-app = 'routerApp', ng-controller = 'AuthCtrl'>
<button ng-click = 'logout()'>Logout</button>
</div>
Добавьте контроллер в определение состояния
.state('adminDownload', {
url: '/download',
templateUrl: '../../views/admin-download.html',
controller: 'AdminCtrl',
resolve: {
postPromise: ['users', function(users){
console.log('look, ma! I ran!'); //is not called
return users.getAll();
}]
},
onEnter: ['$state', 'auth', function($state, auth){
if( ! auth.isLoggedIn()){
$state.go('adminLogin');
}
}]
});