Я пытаюсь отобразить содержимое div на основе ответа от службы $ http. Вызов AJAX работает отлично и здесь не проблема. Тем не менее, я не могу обновить переменную контроллера, которую я хотел бы (intFlag), чтобы получить желаемое поведение. Я думал, что создание глобальной переменной разрешит проблему, хотя я не хочу этого делать.Angularjs ng-show не работает
Вот аналогичный вопрос: (AngularJS : ng-show usage), но решение, которое я видел во многих других местах, похоже, не работает для меня. Это похоже на довольно стандартную процедуру. Первоначально я думал, что это просто проблема с областью, но даже попытка глобальной переменной не работает. Это может быть связано с тем, что представление не обновляется в ответ на изменения глобальных переменных. Я все еще участвую в Угловом.
<html ng-app="myapp">
<head>
<script type="text/javascript">
var intFlag = 0;
var app = angular.module('myapp', []);
app.controller('AController', function ($scope, $http)
{ //I've tried: var this.intFlag = 0; here already
this.CreateUser=function()
{ //scope changes here, right?
$http({
method: 'POST',
url: 'some url', //pseudocode
data: someData, //pseudocode
headers: { 'Content-Type': 'application/x-www-form-urlencoded'}
}).then(function successCallback(response)
{ intFlag = 1; //global variable
//Ideally I want to update a variable that is in the scope for the controller
}, function errorCallback(response) {
});
};
});
</script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.5 /angular.min.js"></script>
</head>
<body ng-controller="AController as Ctrl">
<div>
<button type="button" ng-click="Ctrl.CreateUser()" >Create User</button>
<div ng-show="intFlag === 1">
<p>Congratulations!</p>
</div>
</div>
</body>
</html>
Угловые выражения всегда оцениваются по объему. Глобальные переменные недоступны для них. И их все равно следует избегать. Кроме того, JavaScript имеет логические значения. Используйте значение boolean для значения true/false. Не число. –
Спасибо за информацию о глобальных переменных. Мне велели избегать их угловатой, но никогда не было причин. –
Вы должны избегать их повсюду. Использование глобальных переменных приводит к коду спагетти, где каждая возможная строка кода может потенциально читать или изменять это глобальное состояние, что затрудняет диагностику ошибок и тесты трудно записывать. См. Http://stackoverflow.com/questions/10525582/why-are-global-variables-considered-bad-practice –