2014-01-17 2 views
0

я обнаружил, что документ с angularjs сайта говорит, что я мог бы сделать что-то в моей фабрике, как это:

var speicialProducts = []; 

factory.getFeatureProducts = function() { 
    if ($.isEmptyObject(specialProducts)) { 
     specialProducts = $resource('index.php/products/featureProducts').query().$promise.then(function(data){ 
      return data; 
      // return data.content; 
     }); 
    } 
    return specialProducts; 
} 

, а затем в мой контроллер я:

$scope.specialProducts = specialProductFactory.getFeatureProducts(); 

Но почему-то угловое значение не заполняет модель области, когда данные были правильно возвращены.

Я попытался сделать:

var speicialProducts = []; 

factory.getFeatureProducts = function() { 
    if ($.isEmptyObject(specialProducts)) { 
     specialProducts = $resource('index.php/products/featureProducts').query(); 
    } 
    return specialProducts; 
} 

Это работает, но я хочу сделать что-то, чтобы присвоить часть возвращаемых данных в specialProducts, но не все возвращаются данные (как то, что я сделал в комментарии часть в первом примере кода return data.content). Итак, любые идеи, которые я мог бы сделать, это сработало?

если есть некоторые примеры jsfiddle, которые будут большими. Благодаря

+0

Последнее, что я хочу изменить, это ** $ scope.specialProducts = specialProductFactory.getFeatureProducts(); **, потому что мне может понадобиться этот шаблон для остальной части возможного источника данных –

ответ

1

Попробуйте

if ($.isEmptyObject(specialProducts)) { 
     $resource('index.php/products/featureProducts').query().$promise.then(function(data){ 
      angular.foreach(data,function(item) { 
       specialProducts.push(item); 
      }); 
     }); 
    } 

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

Update: Лучше было бы использовать обещания, но в этом случае

$scope.specialProducts = specialProductFactory.getFeatureProducts();

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

$scope.$watchCollection("specialProducts",function(data) { //Called when data updated});

Я настоятельно рекомендую вам работать с посылом на основе API и использовать then методы, чтобы получить обработки ответов асинхронных.

+0

как его использовать в контроллере? также ** $ scope.specialProducts = specialProductFactory.getFeatureProducts(); **? –

+0

Спасибо, что метод $ обещания работает, я просто хочу подтвердить, могу ли я сделать это в задании, чтобы код выглядел более простым и угловатым, чтобы заполнить $ обещание, когда данные вернутся для меня. Но после того, как я много ищу в Интернете, кажется обещанием, а затем более распространенным способом сделать, так что спасибо –

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