У меня есть две кнопки на странице, которые делают в основном то же самое. Кнопка 1 извлекает строку и выводит ее в div. Кнопка 2 извлекает одну и ту же строку и выводит ее в один и тот же div, но также извлекает код состояния. Только одна кнопка может быть нажата на каждую перезагрузку страницы. Вот урезанный вариант моего контроллера:AngularJS ng-show имеет значение true, но отображение: none остается
angular.module('myModule', []).controller('myController', [ '$scope', function($scope) {
self = this;
this.loaded = false;
this.msg = '';
this.getMessage = new Object(blah...);
this.getMessage.success = function(data) {
self.loaded = true;
self.msg = data.msg;
$scope.$apply(function() {
self;
});
};
this.getStatus = new Object(blah...);
this.getStatus.success = function() {
self.getMessage();
};
this.button1.click(function() {
$.ajax(self.getMessage);
});
this.button2.click(function() {
$.ajax(self.getStatus);
});
}]);
Я использую JQuery для AJAX звонки, потому что я мигрирующие из JQuery в Угловое, и я работаю с передней к задней, чтобы получить все JQuery отсеиваются , До сих пор моя страница выглядит примерно так:
<DOCTYPE html>
<html>
<head>
<!-- js/css inclusions -->
</head>
<body>
<div ng-controller='myController as ctrl'>
<div ng-show='ctrl.loaded' ng-bind='ctrl.msg'></div>
</div>
</body>
</html>
На странице загрузки, мой DIV выглядит следующим образом:
<div class='ng-hide'
ng-show='ctrl.loaded'
ng-bind='ctrl.msg'
style='display: none'></div>
Когда кнопка 1 нажата, мой DIV превращается в:
<div class=''
ng-show='ctrl.loaded'
ng-bind='ctrl.msg'
style=''>Message Here.</div>
Когда нажата кнопка 2, мой div превращается в:
<div class=''
ng-show='ctrl.loaded'
ng-bind='ctrl.msg'
style='display: none'>Message Here.</div>
Этот div не создан мной, просто CSS по умолчанию из Angular для отображения/скрытия вещей. Мой вопрос: я делаю что-то неправильно? Есть ли какая-то проблема, которую я не вижу? Что-то еще, что я не делаю правильно (Угловой способ)?
Редактировать: Injected $scope
сервис в мой контроллер, но все тот же результат.
Есть ли у вас отредактированный код в вашем вопросе, что у вас есть в вашем контроллере? Если да, дайте ему код с предоставленным мной кодом (например: переместите параметр в блок $ $ apply). –
Я переместил параметры в блок $ $ apply, но все тот же результат ... кнопка 1 показывает сообщение, но кнопка 2 просто не позволит удалить «display: none». – wikenator
Хорошо. Возможно, что внутренняя работа Angular требует, чтобы параметры устанавливались в сервисе '$ scope' вместо самого контроллера, чтобы сформировать привязки между представлением и контроллером. например: '$ scope.loaded' вместо' this.loaded'. Используйте его в своем представлении как просто «загруженный» - вам не нужен префикс '$ scope' (' ng-show = "loaded" '). –