2014-08-29 2 views
0

У меня есть объявление области видимости ....Почему мой объект сферы не привязан к этому обещанию?

$scope.item = animalStore.query(); 

Магазин животных, как это ...

factories.factory('animalStore', [ 
    '$resource','$q', function($resource,$q) { 

     var resource = $resource("animals.json"); 
     return resource; 

    } 
]); 

Он отлично работает, однако ....

Я хочу использовать «шаблон обещаний», который я использовал в других приложениях, чтобы убедиться, что мои данные не загружаются дважды. Однако моя привязка, похоже, не работает, даже несмотря на то, что данные возвращаются в «затем». Я проверил тип данных, это обещание/массив, чтобы я мог привязать свою сферу к нему, но почему это не так?

var globalPromise = null; 
factories.factory('animalStore', [ 
    '$resource','$q', function($resource,$q) { 

     var resource = $resource("animals.json"); 

     var retObj = new Object(); 
     retObj.query = function() { 

      if (!globalPromise) { 
       console.log('getting data'); 
       globalPromise = resource.query(function() { }).$promise; 
      } 

      globalPromise.then(function (data) { 

       return data; 
      }); 

     } 

     return retObj; 

    } 
]); 

На боковой ноте есть библиотеки, позволяющие мне выполнять это поведение без необходимости писать собственный код?

ответ

0

На вашем заводе вы должны вернуть обещание от своей функции под названием query. Как показано ниже.

return globalPromise.then(function (data) { 
    return data; 
}); 

Тогда в контроллере можно присвоить результат к $scope.item, как показано ниже.

animalStore.query().then(function (data) { 
    $scope.item = data; 
}); 

Надежды тогда помогают.

+0

У меня есть, чтобы обернуть его в это уродливое заявление о грехе? Я хочу написать чистый код ... Не сделал ли это угловое использование автоматически? – Exitos

+0

Я считаю, что это так, как я имею дело с обещаниями в угловом. Если я ничего не пропустил. Помогло ли это вернуть данные? –

+0

Я думаю, что искал функцию с угловым названием «разворачивание», которую они отключили в версии 1.2. В любом случае это очень помогло. – Exitos

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