Я пытаюсь объявить массив внутри функции контроллера, которая происходит после того, как завод извлекает данные, а затем получает доступ к ней после завершения выполнения функции. Вот что у меня для моего кода:
app.controller('SignUpController', function ($scope, $http, $location, DailyCounterService, $localStorage) {
DailyCounterService.GetDailyCountersList().then(function (d) {
$scope.DailyCounters = d.data;
$scope.allCounters = [];
var daySixteen = d.data.filter(function (d) {
// This is where I'm building the array I want to access later
$scope.allCounters.push(d.MICounter);
return d.MIDay === "16";
});
console.log($scope.allCounters);
// This prints in console '[2, 6, 1, 1, 7, 8, 2......]'
// So the array is now initialized
}, function (error) {
alert('Error!');
});
// Here is where I want to access $scope.allCounters once again
// But Can't because doing this:
console.log($scope.allCounters);
// prints 'undefined'
// How would I make $scope.allCounters be able to be accessed here?
})
.factory('DailyCounterService', function ($http) {
var fac = {};
fac.GetDailyCountersList = function () {
return $http.get('/Data/GetDailyCountersList')
}
return fac;
})
Как я спросил в комментариях к концу моего контроллера, как бы я мог получить доступ к переменной, установленной в функции ранее вне этой функции?
Ну, если этот контроллер связан с маршрутом, то вы можете связать этот код get в атрибуте разрешения поставщика маршрутов, как это,
.when("/signup", {
templateUrl: "signup.html",
controller: "SignUpController",
resolve: {
allCounters:
function(DailyCounterService){
DailyCounterService.GetDailyCountersList().then(function (d) {
// Do your stuff
return allCounters;
}, function (error) {
alert('Error!');
});
}
}
}),
и доступ к allCounters в вашем контроллере, как это,
app.controller('SignUpController', function ($scope, $http, $location, allCounters, DailyCounterService, $localStorage)
Таким образом, все счетчики всегда будут инициализированы при загрузке вашего контроллера.
Подробнее о решении: http://odetocode.com/blogs/scott/archive/2014/05/20/using-resolve-in-angularjs-routes.aspx
.then()
? Какой-нибудь способ обхода локального хранилища?