#angularjs #global-variables
#angularjs #глобальные переменные
Вопрос:
Я хочу изменить var в js в соответствии с приведенным ниже кодом:
<script type="text/javascript">
var dataRes;
ersalvetabeApi()
function ersalvetabeApi() {
$.ajax({
url: '/Api/Test',
type: 'GET',
contentType: 'application/json; charset=utf-8',
dataType: 'json',
success: function (data, textStatus, xhr) {
// dataRes=data[0]
dataRes = data;
console.log(data[0]);
},
error: function (xhr, textStatus, errorThrown) {
console.log('Error in Operation');
}
});
}
var myApp = angular.module('myApp', []);
myApp.controller('TestCtrl', ['$scope', '$window', function ($scope, $window) {
//this.array = $window.dataRes;
this.array = $window.dataRes;
}]);
</script>
Когда я использую этот код, этот код не работает. Но когда я использовал alert(datares)
ersalvetabeApi()
эту работу. Я не хочу использовать alert.
Пожалуйста, помогите решить эту проблему. Заранее спасибо.
Ответ №1:
Вы выполняете асинхронный вызов сервера, но запускаете приложение angular синхронно, поэтому, когда вы достигнете кода angular, значение переменной window еще не присвоено.
var dataRes;
ersalvetabeApi().then(function () {
var myApp = angular.module('myApp', []);
myApp.controller('TestCtrl', ['$scope', '$window', function ($scope, $window) {
//this.array = $window.dataRes;
this.array = $window.dataRes;
}]);
});
function ersalvetabeApi() {
return $.ajax({
url: '/Api/Test',
type: 'GET',
contentType: 'application/json; charset=utf-8',
dataType: 'json',
success: function (data, textStatus, xhr) {
// dataRes=data[0]
dataRes = data;
console.log(data[0]);
},
error: function (xhr, textStatus, errorThrown) {
console.log('Error in Operation');
}
});
}
Попробуйте обернуть свой код, который должен вызываться после данных, возвращенных из вызова ajax. Теперь он будет выполняться асинхронно.
Комментарии:
1. Не удается прочитать свойство ‘then’ из undefined , эта ошибка возникает
2. спасибо за ответ Микки 🙂 но для меня это не работает! выдает ту же ошибку: не удается прочитать свойство ‘then’ неопределенного
3. Не могли бы вы создать plunker, и я решу это за вас!
4. я не знаю, что это такое, но я очень благодарен за ответ
Ответ №2:
наконец-то я могу это решить. может понадобиться всем. мой код:
var myApp = angular.module('myApp', []);
myApp.factory('valueService', function ($interval) {
var service = {
ue: "hjk",
};
return service;
});
myApp.controller('SomeController', function ($scope, $interval, valueService) {
// start(); // this line will execute when constructor initiates, starting the whole thing.
// valueService.value = "45356";
start();
function start() {
$interval(function () {
$.ajax({
url: '/Api/Test',
type: 'GET',
contentType: 'application/json; charset=utf-8',
dataType: 'json',
success: function (data, textStatus, xhr) {
// dataRes=data[0]
dataRes = data;
valueService.ue = data;
console.log(valueService.ue[0].id);
},
error: function (xhr, textStatus, errorThrown) {
console.log('Error in Operation');
}
});
}, 1000,2);
}
});
myApp.controller('TestCtrl', function ($scope, valueService) {
$scope.message = 'Another Controller';
$scope.valueService = valueService;
// this.array = valueService;
});
<div ng-controller="SomeController">
</div>
<hr />
<div ng-controller="TestCtrl as ctrl">
<span ng-repeat="entry in valueService.ue track by $index">
{{ entry.name }} "/"
</span>
{{message}}
</div
Удачи