Подтвердить что ты не робот

Загрузка исходных данных в приложение angularjs

В настоящее время я пытаюсь разработать приложение AngularJS. Это мое первое приложение, использующее AngularJS, и я думаю, что я хорошо знаю, как это работает, поскольку я был разработчиком Silverlight в течение нескольких лет: -)

Однако есть одна, простая вещь, которую я не могу понять: как получить начальные данные для приложения, когда оно начнется.

Мне нужна простая таблица данных, в которой несколько полей могут редактироваться встроенными (по выпадающим спискам). Моя структура приложения такова:

app.js

var app = angular.module('feedbackApp', []);

feedbackService.js

app.service('feedbackService', function ($http) {
this.getFeedbackPaged = function (nodeId, pageNumber, take) {
    $http.get('myUrl', function (response) {
        return response;
    });
};
});

feedbackController.js

app.controller('feedbackController', function ($scope, feedbackService, $filter) {
// Constructor for this controller
init();

function init() {
    $scope.feedbackItems = feedbackService.getFeedbackPaged(1234, 1, 20);
}
});

Разметка

<html ng-app="feedbackApp">
<head>
    <script src="http://code.jquery.com/jquery-1.10.1.min.js"></script> 
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.0.7/angular.min.js"></script>
</head>
<body>
    <table class="table" style="border: 1px solid #000; width:50%;">
        <tr ng-repeat="fb in feedbackItems | orderBy: 'Id'" style="width:auto !important;">
            <td data-title="Ansvarlig">
                {{ fb.Name }}
            </td>
            <td data-title="Kommentar">
                {{ fb.Comment }}
            </td>
        </tr>
    </table>
</body>

Но при запуске приложения таблица пуста. Я думаю, это связано с тем, что приложение запускается до того, как данные из службы добавляются в viewmodel ($ scope), но я не знаю, как сделать его инициализацией до запуска приложения, поэтому отображаются первые 20 строк таблицы.

Кто-нибудь знает, как это сделать?

Спасибо заранее!

4b9b3361

Ответ 1

Вы должны немного изменить свой код, чтобы заставить его работать, так как вы работаете с обещанием здесь, вы должны использовать .then

app.service('feedbackService', function ($http) {
this.getFeedbackPaged = function (nodeId, pageNumber, take) {
    return $http.get('myUrl');
};
});

app.controller('feedbackController', function ($scope, feedbackService, $filter) {
// Constructor for this controller
init();

function init() {
   feedbackService.getFeedbackPaged(1234, 1, 20).then(function(data){$scope.feedbackItems=data;});
}
});