2014-10-30 3 views
0

У меня есть страница с ng-init = find(), после того как я перейду на другие страницы и что-то сделаю с db, данные на исходной странице изменится. И затем я перенаправляю пользователя на исходную страницу. И я ожидаю увидеть изменения на первой странице.Угловая неупорядоченная служба работает некорректно

$scope.find = function() { 
    Stats.query 
     .then(function(stats){ 
       $scope.stats = stats; 
     }); 
}; 

где Статистика это сервис, который я создал с restangular впрыскивается. Служба выглядит так:

angular.module('mean.stats').factory('Stats', ['Restangular', 
    function(Restangular) { 
    var stats = Restangular.all('stats'); 
    return { 
     query: stats.getList() 
    } 
}]); 

Это не работает, как я и ожидал. Но если я использую традиционный подход $ resource, результат будет правильным.

angular.module('mean.stats').factory('Stats', ['$resource', 
    function($resource) { 
    return $resource('stats/:statsId', { 
     statsId: '@_id' 
    }); 
}]); 

Также позже я выяснил, что эта неустойчивая вещь также работает правильно. Я не совсем понимаю, почему это ... Кто-нибудь знает, что происходит? Благодарю.

angular.module('mean.stats').factory('Stats', ['Restangular', 
    function(Restangular) { 
    var stats = Restangular.all('stats'); 
    return { 
     query: function(){ 
      return stats.customGETLIST(''); 
     } 
    } 
}]); 
+0

Вы видите вызов, достигнутый в «сетевой» консоль вашего браузера? Итак, у вас есть сообщение об ошибке? – AlexHv

+0

Нет сообщения об ошибке. Я вижу, что put выполнен правильно. –

+0

Что делать, если вы console.log результаты вызова с помощью restangular? Кстати, в вашем втором примере кода отсутствуют скобки, что довольно запутывает :-) – AlexHv

ответ

1

В вашем втором блоке кода, вы назначили Stat.query обещанием возвращенного getList() вместо функции вызова getList(). Таким образом, запрос был отправлен на сервер только один раз, когда был определен завод Stat. Для того, чтобы заставить его работать, сначала Stat.query функция вызова getList():

angular.module('mean.stats').factory('Stats', ['Restangular', 
    function(Restangular) { 
    var stats = Restangular.all('stats'); 
    return { 
     query: function() { 
      return stats.getList(); 
     } 
    } 
}]); 

Затем вызовите Stat.query в методе $scope.find: (добавить () после query):

$scope.find = function() { 
    Stats.query() 
     .then(function(stats){ 
       $scope.stats = stats; 
     }); 
}; 
+0

получил! Я это то, что я тоже думал! –