2016-04-07 1 views
0

Я получаю обновления от Backend через соединения сокетов. Я хочу автоматически обновлять Frontend с помощью AngularJS, используя объект данных для данных, которые я получил от Backend.Как сохранить шаблон AngularJS в процессе обновления сокетов?

Что у меня?

Шаблон:

Status: {{unit.getStatus()}} 

Контроллер 1:

function ($scope, unitFactory) { 
    // register to unit factory to get the updates and do 
    // $scope.unit = data.getUnit(); 
} 

Контроллер 2:

function ($scope, unitFactory) { 
    // register to unit factory to get the updates and do 
    // $scope.unit = data.getUnit(); 
    // $scope.foo = data.getFoo(); 
} 

Услуги:

function(requestFactory) { 
    var unit = {}, 
     foo = {}; 

    Sockets.socket('unit', function (response) { 
     unit = new Unit(response['data']); 
     foo = new Foo(response['foo']); 

     // This is the data object which has to be send to the controllers 
     var Data = { 
      getUnit: function() { 
       return unit; 
      }, 

      getFoo: function() { 
       return foo; 
      } 

      // some more functions... 
     } 
    }); 
} 

Розетки:

channel.on('data', function (event) { 
    try { 
     event = JSON.parse(event);  
     // successCallback is what is given as second parameter in the `Service`.   
     $rootScope.$apply(successCallback(event)); 
    } catch (e) { 
     console.log('Error: ' + e); 
    } 
}); 

Как это должно работать вместе?

  1. обновление Оправа приходит и получает обрабатываются Sockets объекта
  2. Sockets вызова функции, которая зарегистрирована в Service
  3. Функция обратного вызова в Service процесса данные
  4. НЕДОСТАЮЩИХ Обработанные данные, обернутые в объект, должны быть доставлены в контроллеры
  5. MISSING Контроллеры могут делать все, что они хотят делать с данными, когда есть новое обновление.
  6. Шаблон обновляется автоматически.

Может ли кто-нибудь помочь мне с MISSING запчасти? Я пробовал много разных подходов, но каждый раз бегал до тупиков.

+0

Вы пытались использовать событие, а не обратный вызов? – sdfacre

ответ

0

Вы пытались вернуть обещание для данных, а затем $ state.reload()?

+0

Как обещание поможет мне с обновлениями сокетов? Пока я не знаю, что использовал их только для запросов типа 'get', которые выполняются только один раз. – messy

0

Понял решена с помощью 'данных шаблона модели':

шаблон 1 (используемый контроллером 1):

Status: {{unit.data.getStatus()}} 

Шаблон 2 (используемый контроллером 2):

Status: {{foo.data.getBar()}} 

Контроллер 1:

function ($scope, unitFactory) { 
    $scope.unit = unitFactory.getUnit(); 
} 

Контроллер 2:

function ($scope, unitFactory) { 
    $scope.unit = unitFactory.getUnit(); 
    $scope.foo = unitFactory.getFoo(); 
} 

Услуги:

function(requestFactory) { 
    var unit = { data:{} }, 
     foo = { data:{} }; 

    Sockets.socket('unit', function (response) { 
     unit.data = new Unit(response['data']); 
     foo.data = new Foo(response['foo']); 
    }); 

    return     
     getUnit: function() 
      return unit; 
     }, 

     getFoo: function() { 
      return foo; 
     } 
     // some more functions... 
    } 
} 

Разъемы:

channel.on('data', function (event) { 
    try { 
     event = JSON.parse(event);  
     // successCallback is what is given as second parameter in the `Service`.   
     $rootScope.$apply(successCallback(event)); 
    } catch (e) { 
     console.log('Error: ' + e); 
    } 
}); 

Поскольку данные хранятся в объекте данных в шаблонах обновляется (так как она является ссылкой). Я должен привыкнуть к этим дополнительным атрибутам data, и он не выглядит красивым, но он выполняет свою работу.

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