Привет, я пытаюсь отобразить данные с сервера в приложении Angularjs, где я получил данные и использую ng-repeat, чтобы отобразить его через контроллер.
Вот как выглядит мой контроллер:
module.controller('FiveReasons', function($scope, $http, $rootScope, $sce) {
ons.ready(function() {
$scope.reasonsLists = {};
var reasonsListing = $http.get("http://vbought.com/design_14/index.php/design_ci/post/Clients");
reasonsListing.success(function(data, status, headers, config) {
console.log(data[0].post_title);
$scope.reasonsLists = data;
$scope.spinner = false;
});
reasonsListing.error(function(data, status, headers, config) {
alert("Can Not load the address Ajax");
});
});
});
Но когда ng-repeat
заканчивает загрузку, данные не отображаются.
Вот как мой ng-repeat
:
<ons-carousel swipeable overscrollable auto-scroll fullscreen var="carousel" name="FiveRes" class="FiveRes">
<div ng-repeat="reasonsList in reasonsLists">
<ons-carousel-item style="background: #09a4c0;" >
<div class="item-label">Number : {{reasonsList}}</div>
</ons-carousel-item>
</div>
<ons-carousel-cover></ons-carousel-cover>
</ons-carousel>
Как я могу обновить список, как только данные будут там. Как и мы, "триггер (" обновить ")" в jquery.
После запуска ng-repeat это так, как я получаю значение, но экран пуст.
Спасибо! (Заранее)
Попробуй это:
module.controller('FiveReasons', function($scope, $http, $rootScope, $sce) {
ons.ready(function() {
$scope.reasonsLists = {};
var reasonsListing = $http.get("http://vbought.com/design_14/index.php/design_ci/post/Clients");
reasonsListing.success(function(data, status, headers, config) {
console.log(data[0].post_title);
$scope.reasonsLists = data;
$scope.spinner = false;
});
reasonsListing.error(function(data, status, headers, config) {
alert("Can Not load the address Ajax");
});
//ADD this to notify Angular for the changes and run a digest cycle
$scope.$digest();
});
});
Это происходит потому, что обработчик события (ons-ready
) не запускает новый цикл $digest
.
Чтобы отобразить данные без вызова $digest()
, удалите обратный вызов ons-ready
и выполните ваш код непосредственно в теле контроллера. Как пример ниже:
module.controller('FiveReasons', function($scope, $http, $rootScope, $sce) {
$scope.reasonsLists = {};
var reasonsListing = $http.get("http://vbought.com/design_14/index.php/design_ci/post/Clients");
reasonsListing.success(function(data, status, headers, config) {
console.log(data[0].post_title);
$scope.reasonsLists = data;
$scope.spinner = false;
});
reasonsListing.error(function(data, status, headers, config) {
alert("Can Not load the address Ajax");
});
//No need to call $digest
});
ОБНОВЛЕНИЕ. Проверьте этот код, который является упрощенной версией вашего кода, который показывает только проблему. Удалите $scope.$digest()
из комментариев, чтобы увидеть работу carousel
.
Я думаю, что в этом случае я бы исключил использование готового кода и вызвал ваш код с помощью ng-init.
module.controller('FiveReasons', function($scope, $http) {
this.reasonsLists = {};
$scope.getReasonsLists = function() {
$scope.reasonsLists = {};
$http.get("http://vbought.com/design_14/index.php/design_ci/post/Clients")
.success(function(data, status, headers, config) {
console.log(data[0].post_title);
$scope.reasonsLists = data;
$scope.spinner = false;
})
.error(function(data, status, headers, config) {
alert("Can Not load the address Ajax");
});
};
});
то в вашем html на теге таблицы просто добавьте ng-init = "getReasonsLists()"
"Обновление" не должно быть необходимым, поскольку угловой использует другой подход. После определенных событий, таких как "щелчок" или возврат $ http-prom, угловые проходят через переменные с привязкой и проверяют, были ли они изменены, и если это так - изменяет DOM.
В вашем случае я думаю, что обещание возвращается, прежде чем вы добавляете успешный обратный вызов. Попробуйте связать его так:
$http.get("http://vbought.com/design_14/index.php/design_ci/post/Clients").success(function(data, status, headers, config) {
console.log(data[0].post_title);
$scope.reasonsLists = data;
$scope.spinner = false;
}).error(function(data, status, headers, config) {
alert("Can Not load the address Ajax");
});
В других случаях вы можете использовать $ scope. $ Apply(), но я думаю, это должно сказать вам, что вы не можете вложить $ digests, так как после $ http-request должен произойти один.