2013-12-19 3 views
2

Я построил service AngularJS - добавить данные в существующую модель

.factory('Plot', ['$resource', 
    function($resource){ 
     return $resource(path, {}, { 
      get: { 
       method: 'GET' 
       params: { myparams: params } 
      } 
     }); 
    }]); 

Сейчас в controller I inject это service и просить нравится:

$scope.data = Plot.get(params} 

Поскольку я должен получить новый данные с сервера и append в view Мне нужно добавить новые данные в $scope.data. Я пробовал с push или concat, но object не является array (на самом деле $resourceobject, я думаю). Я новичок в AngularJS и пытаюсь войти в несколько механизмов, я искал решение, но не нашел ничего, что было моим делом.

Я попытался это: AngularJS - Append to a model with a $resource, но это не похоже на работу

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

+0

'get' возвращает' promise'. Проверьте документы для '$ q'. –

ответ

0

Как указано в комментариях, get возвращает promise, а не объект. Легкий путь: вы можете использовать функцию обратного вызова, чтобы получить возвращающие данные:

Plot.get(params, function(result) { 
    $scope.data = result 
} 

Если сервер возвращает JSON, то вы можете использовать синтаксис как result.plot, чтобы получить вложенные объекты.

0

От Angularjs $resource doc

Usage: 
$resource(url[, paramDefaults][, actions]); 

Returns: A resource "class" object with methods for the default set of resource 
actions optionally extended with custom actions. The default set contains these 
actions: 

{ 'get': {method:'GET'}, 
    'save': {method:'POST'}, 
    'query': {method:'GET', isArray:true}, 
    'remove': {method:'DELETE'}, 
    'delete': {method:'DELETE'} }; 

The action methods on the class object or instance object can be invoked with the 
following parameters: 

* HTTP GET "class" actions: Resource.action([parameters], [success], [error]) 

Success callback is called with (value, responseHeaders) arguments. Error callback is 
called with (httpResponse) argument. 

В вашем случае:

Plot.get(params, successCallBack(receivedValue){ 
    \\ do something with receivedValue 
}) 
0

В комментариях говорится обещание возвращается, но вы не должны ждать успешного обратного вызова.

Если вы хотите использовать $scope.data как массив, то просто инициализируйте его как массив и добавьте к нему $ resource. Смотрите эту jsfiddle:

http://jsfiddle.net/y88UB/3/

-2

Для добавления данных к объекту:

var data = {}; // new object 
data["someKey"] = "someValue"; 
Смежные вопросы