Вот мой код: JS:
var timer;
$scope.getapi_url = function(n){
var url = n;
$http({
method: 'GET',
url: url,
})
.then(function successCallback(data) {
$scope.data = data.data;
console.info($scope,data);
timer = $timeout($scope.getapi_url(), 5000);
}, function errorCallback(response) {
$scope.errorBackend = true;
console.info(response);
console.info('error');
});
};
HTML:
<button class = "btn btn-clear btn-sm" ng-click = "getapi_url('myurl') ">Click!</button>
После первого $timeout я получаю сообщение об ошибке, что-то вроде n is undefinded
Что я могу с этим сделать?
Заранее спасибо за все ответы !!!
@AlekseySolovey Да, вообще-то у меня есть var vm = this; а это смешивание с $ scope - может быть в этом проблема?
Просто запуталась, почему у вас и $scope.getapi_url, и vm.getapi_url
О, это моя ошибка с написанием этого ответа
в моем коде только vm
почему вам нужна рекурсия в вызове API и каков выход для оператора рекурсии?


Попробуйте это, но это никогда не прекратится, вам нужно прекратить вручную использовать $timeout.cancel(timer);.
var timer;
$scope.getapi_url = function (n) {
var url = n;
$http({
method: 'GET',
url: url,
})
.then(function successCallback(data) {
$scope.data = data.data;
console.info($scope, data);
timer = $timeout($scope.getapi_url(n), 5000);
// passing n if you don't want check n value on starting of function.
}, function errorCallback(response) {
$scope.errorBackend = true;
console.info(response);
console.info('error');
});
};
@ bafix2203 вы можете написать условие перед вызовом $ http. if (n), тогда вызовите API else, чтобы пропустить.
Вы случайно не микшируете
vmс$scope? Имеет ли ваш HTML-код синтаксис controllerAs?