2016-07-31 1 views
2

Я разработал веб-сервер api и недавно начал разрабатывать клиентскую часть, которая разработана в Angular-js и машинописном тексте.Угловые-js с машинописными текстами - должны ли данные храниться в контроллерах или службах?

У меня есть кое-что, что я не уверен в отношении дизайна моего кода на стороне клиента.

Скажите, например, что у меня есть представление, представляющее список элементов, и контроллер этого вида создается много раз, каждый раз, когда нажимается кнопка (например). Этот вид представляет собой список элементов, и поэтому этот массив receieved throguh Http GET в контроллере каждый раз, когда он будет создан, и вид имеет

ng-repeat="item in vm.items" 

Тем не менее, мне кажется, что если бы я сохранить этот список на сервис, который от моего понимания создается один раз для одного клиента только, я мог бы использовать один запрос GET один раз, когда создается служба и использовать его в представлении, как это:

ng-repeat="item in vm.service.items" 

и обновляет этот список пунктов будет происходят только с использованием signalr.

Есть ли у второго подхода недостатки? Потому что сейчас я не вижу причины для этого.

ответ

0

Да, это звучит как классический DAL-сервис для меня. Я бы рекомендовал вам работать с обещанием, чтобы вы могли отслеживать, когда будут решены нужные данные. Вот пример:

export class EntityProvider { 
     static serviceName: string = "entityProvider"; 

     private entity = null; 

     static $inject : string[] = ["YourService", "$q"]; 
     constructor(yourService: YourService, private mQService: ng.IQService) { 

     } 

     get getEntity(): ng.IPromise<ConnectionInfoDto[]> { 
      if (this.entity === null) { 
       return this.yourService.getEntity() 
        .then(result => { 
         this.entity = result.data; 
         return this.entity; 
        });  
      } else { 
       return this.mQService.when(this.entity); 
      } 
     } 


     static bootstrap(aModule: ng.IModule) { 
      return aModule.service(this.serviceName, EntityProvider); 
     } 
    } 
+0

Можете ли вы объяснить эту функцию, которую вы написали немного подробнее? Прямо сейчас, что у меня есть в сервисе ctor: $ http.get («..»). Success (function (data) {ListService.service.items = data;}); это другое? –

+0

Я решаю значение в getter вместо конструктора и возвращаю обещание вместо разрешенного объекта. –

+0

А ты заставлял его работать как ленивая инициализация? Однако зачем мне нужно возвращать обещание? если запрос на сервер будет успешным, я просто хочу сохранить данные в массиве в службе, которая сделала запрос, не обращаясь с ним в контроллере каким-либо образом, как я уже упоминал выше. Связывание будет, чем быть прямым в массиве, хранящемся в службе –

Смежные вопросы