AngularJS: лучшая практика для передачи данных в шаблон

У меня есть следующая сервисная функция, которая будет возвращать данные, которые я хочу отобразить (обратите внимание, что данные могут измениться в любое время):

myService.getData(); // Returns an array

Я должен использовать службу, так как мне нужны эти данные и в других контроллерах/службах.

Теперь я не уверен, что лучше всего отображать данные в шаблоне. Что я делаю, так это:

Пример 1

<li ng-repeat="item in myService.getData()">
    {{item.name}}
</li>

Он работает нормально, но это лучшая практика?

Я также пробовал следующее:

Пример 2

// In my controller:
$scope.data = myService.getData();

// In the template
<li ng-repeat="item in data"  ng-controller="myCtrl">
    {{item.name}}
</li>

Это не работает (при загрузке страницы данные попадают один раз в $scope.data. Любые обновления игнорируются). Думаю, я мог бы использовать $watch (чтобы посмотреть myService.getData()). Но я думаю, что это медленнее.

Что вы думаете? Могу ли я вызвать службу в шаблоне (например, в примере 1)?

Большое спасибо!


person Tream    schedule 03.11.2014    source источник
comment
Фрагмент метода getData был бы полезен   -  person Simon Belanger    schedule 03.11.2014


Ответы (1)


используйте это как второй пример (лучшая практика):

// In my controller:
$scope.service= myService

// In the template
<li ng-repeat="item in service.getData()"  ng-controller="myCtrl">
    {{item.name}}
</li>
person Mukund Kumar    schedule 03.11.2014
comment
Да, это (уже) именно то, что я использую. Я просто не уверен, правильно ли это, или мне нужно использовать какой-то другой подход. - person Tream; 03.11.2014
comment
это лучшая практика. Вы можете использовать ее без каких-либо сомнений. - person Mukund Kumar; 03.11.2014
comment
@MukundKumar Что заставляет вас думать, что это лучшая практика? Что getData делает запрос AJAX, а затем он будет выполняться несколько раз за цикл дайджеста? - person dfsq; 03.11.2014
comment
всякий раз, когда в объекте myservice будут какие-либо изменения, они будут отражены в $scope.service. поэтому нет необходимости помещать $watch и другие вещи в код (которые делают код грязным). Если у вас есть лучший способ сделать то же самое, пожалуйста, предложите нам. - person Mukund Kumar; 03.11.2014
comment
getData(){return _data;} Вот и все. _data заполняется один раз при загрузке через Ajax или при различных взаимодействиях с пользователем. - person Tream; 03.11.2014
comment
В любом случае за кулисами в обоих случаях присутствует наблюдательное выражение. В случае ngRepeat getData() будет выполняться дважды (как минимум). Если все в порядке, то без проблем используйте его. Просто говорю, что этот подход не самый лучший и не может быть лучшим, потому что он не всегда уместен. Если getData делает запрос AJAX, этот шаблон не рекомендуется. - person dfsq; 03.11.2014