Кажется, я не могу понять проблему здесь. При успешном ответе ajax я устанавливаю значение в текущем контроллере, которое не отражается в пользовательском интерфейсе. Общий ответ, который я нашел, состоит в том, чтобы работать с функциями Angular ajax и/или применять $apply или $digest к $scope. Ни один из них не работает.
Обратите внимание, что в коде угловые теги {{ и }} заменены на ‹% и %>, так как я использую механизм заманчивых лезвий, и эти теги конфликтуют.
Идея состоит в том, чтобы установить логическое значение обработки в контроллере. Установите значение true перед ajax и значение false после. Проблема в том, что значение не возвращается в ложное состояние. Запуск метода $apply или $digest возвращает Error: [$rootScope:inprog]
.
После ajax я бегу
console.log($scope.processing);
console.log(this.processing);
console.log($scope);
Возвращение
undefind
undefind
И возвращает объект $scope. Однако в объекте $scope, выводимом в консоль, значение обработки такое, как должно быть (false).
Однако это не отражено в пользовательском интерфейсе, это все еще верно. При нажатии на кнопку-переключатель для значения обработки устанавливается значение false, и пользовательский интерфейс обновляется. Так что я очень запутался, где проблема...
HTML
<div class="panel panel-default" ng-controller="UnitOfMeasureController as uom">
<div class="panel-heading">
<h3 class="panel-title">Create new Unit of Measure</h3>
</div>
<div class="panel-body">
<div ng-hide="uom.processing">
<form ng-submit="uom.processForm()" id="new_uom_form">
<div class="form-group">
<label for="uom_input01">Name</label>
<input ng-model="uom.formData['name']" type="text" class="form-control" id="uom_input01" placeholder="" name="uom[input01]" value="{{\xsds::old('uom.input01',$values)}}">
</div>
<div style="text-align:right"><button type="submit" class="btn btn-primary" ><i class="fa fa-plus-square"></i> Create new Unit of Measure</button></div>
</form>
</div>
{!!\xsds::angularLoader('ng-show="uom.processing"')!!}
</div>
<button ng-click="uom.processing = false">Toggle</button>
<%uom.processing%>
</div>
app.js
(function( ){
var app = angular.module('ingredients',[], function($interpolateProvider) {
$interpolateProvider.startSymbol('<%');
$interpolateProvider.endSymbol('%>');
});
app.controller('UnitOfMeasureController', ['$scope','$http', function($scope,$http) {
formData = [];
this.processing = false;
this.processForm = function( ){
this.processing = true;
$http.get(document.js_root+'/recipe/ingredients/uom/ajax-create').
success(function(data, status, headers, config) {
/* $scope.$apply(function(){
$scope.processing = false;
});*/
console.log($scope.processing);
console.log(this.processing);
console.log($scope);
$scope.processing = false;
if (!data.success) {
console.log(data.errors);
} else {
console.log('success');
}
//$scope.$digest();
//$scope.$apply(); similar but slower
/* $scope.$apply(function() {
$scope.processing = false;
});*/
}).
error(function(data, status, headers, config) {
$scope.processing = false;
if(document.is_js_dev){
alert(status+' ');
}
});
return false;
};
}]);
})();