Я только начал использовать AngularJS, и в качестве проекта я решил создать простое приложение для управления закладками. Я хочу иметь возможность поддерживать список закладок и добавлять/удалять элементы. Я использую Django с Django REST framework и Angular.AngularJS Связь между ng-repeat и контроллером
До сих пор я написал службу для захвата закладок из базы данных, и я могу распечатать их на консоли с моего контроллера, но ng-repeat, похоже, не видит их.
Вот мой код для службы:
.factory('BookmarkService', ["$http", function ($http) {
var api_url = "/api/bookmarks/";
return {
list: function() {
return $http.get(api_url).then(function (response) {
return response.data
})
}
}
}]);
И для контроллера:
.controller("ListController",
["$scope", "BookmarkService", function ($scope, BookmarkService) {
$scope.bookmarks = BookmarkService.list();
console.log($scope.bookmarks);
}]);
А вот HTML:
<div ng-controller="ListController as listCtrl">
<md-card>
<md-card-content>
<h2>Bookmarks</h2>
<md-list>
<md-list-item ng-repeat="bookmark in listCtrl.bookmarks">
<md-item-content>
<div class="md-tile-content">
<p>{[{ bookmark.name }]} - {[{ bookmark.url }]}</p> // used interpolateProvider to allow "{[{" instead of "{{"
</div>
<md-divider ng-if="!$last"></md-divider>
</md-item-content>
</md-list-item>
</md-list>
</md-card-content>
</md-card>
</div>
При печати на консоль от контроллер Я вижу объект обещания, но ng-repeat не повторяется: image of promise object
Я был бы очень признателен, если бы кто-то помог мне найти мою ошибку и понять, почему это происходит. Мне все еще не совсем нравится, как все эти части подходят друг к другу.
Спасибо за ваше время!
Спасибо! Этот ответ исправил эту проблему. – eilidh
Я уже пробовал это раньше. Однако возникла еще одна проблема. Закладки не загружаются, когда я использую синтаксис «контроллер как», т. Е. «ListCtrl.bookmarks». Они только без него. Вы не знаете, почему это происходит? – eilidh
О, я этого раньше не заметил. При использовании контроллера в качестве синтаксиса вам необходимо прикрепить свойства к экземпляру контроллера, а не к '$ scope'. В этом случае это будет выглядеть как '.controller (« ListController », [" BookmarkService ", function (BookmarkService) { this.bookmarks = BookmarkService.list(); console.log (this.bookmarks); }]); 'Обратите внимание на' this' вместо '$ scope' –