Я читал различные сообщения SO о обещаниях и обратных вызовах, но до сих пор не понимаю, когда использовать. Я даже не уверен на 100%, если моя проблема связана с обещаниями или обратными вызовами. У меня возникают проблемы с получением данных из службы в контроллер, а затем доступ к этим данным в представлении.AngularJS: Получение данных из службы в контроллер
HTML
<div ng-controller="AppCtrl as appCtrl" flex="">
<div ng-controller="FlexClusterCtrl as modelCtrl">
<md-grid-list md-cols-sm="1" md-cols-md="2" md-cols-gt-md="6"
md-row-height-gt-md="1:1" md-row-height="4:3" md-gutter="8px"
md-gutter-gt-sm="4px" class="gridList">
<md-grid-tile ng-repeat="cluster in instances.clusters"
md-rowspan="1" md-colspan="3" md-colspan-sm="1" class="gridTile">
<md-grid-list flex="" md-cols-sm="2" md-cols-md="4" md-cols-gt-md="6"
md-row-height-gt-md="1:1" md-row-height="1:1" md-gutter="6px"
layout-fill>
<md-grid-tile ng-repeat="cluster2 in cluster.clusters2"
md-rowspan="1" md-colspan="1" class="flexTile">
<md-grid-list flex="" md-cols-sm="1" md-cols-md="2" md-cols-gt-md="3"
md-row-height="4:3" layout-fill>
<md-grid-tile ng-repeat="INSTANCE in cluster2.INSTANCES"
md-colspan="1" class="instanceTile">
<md-button ng-disabled>{{INSTANCE.ID}}</md-button>
</md-grid-tile>
</md-grid-list>
</md-grid-tile>
</md-grid-list>
<md-grid-tile-footer style="text-align:center;"><h3>{{cluster.name}}</h3></md-grid-tile-footer>
</md-grid-tile>
</md-grid-list>
</div>
</div>
контроллер и обслуживание
angular.module('app')
.service('ModelSvc', ['$http', function($http) {
return {
getInstances: function() {
$http.get('vendor/resources/flat.json')
.then(function(res) {
$instances = res.data;
return $instances;
});
}
};
}])
.controller('FlexClusterCtrl', ['$scope', 'ModelSvc', function($scope, ModelSvc) {
$scope.init = function() {
ModelSvc.getInstances().then(function(data) {
$scope.instances = data;
});
};
}]);
Я использую Угловая Материал, если HTML выглядит напуганным для некоторых из вас. Я также попытался использовать [в моем первом ngRepeat] ng-repeat="cluster in init.instances.clusters"
и ng-repeat="cluster in init.clusters"
, но безрезультатно. Я не знаю, проблема в моей службе, контроллере или просмотре. Браузер не возвращает никаких ошибок.
Хм нормально. Тогда я получу эти данные в представлении с чем? 'ng-repeat =" в init.clusters'? Я пробовал несколько комбинаций с вашим предложением, но ни один из них не работает. – UltraSonja
Вы храните его в $ scope.instances not $ scope.init. -repeat = "экземпляр в экземплярах". Вы проверили, будут ли данные $ scope.instances получать ваши данные? – pcagica
Посмотрите на свой HTML-код, это выглядит хорошо, поэтому я думаю, что это проблема с получением ваших данных. – pcagica