@LeshaPistolet

Как правильно использовать scope в данном случае?

В базе данных имеется коллекция объектов. На странице сделана навигация по категориям этих объектов. При использовании навигации меняется коллекция в контроллере. Так же сделал поиск по другому полю используя поисковую строку, однако при изменении коллекции в контроллере, изменений на UI не происходит. Данные из базы приходят корректно и сам массив $scope.carsList изменяется. Пытался ставить $scope.$apply(), не помогло, только ошибки в консоль полетели. Буду благодарен за помощь.
angular.module('app', [])
    .factory('carRepository', function ($http) {
        return {
            getCarsForNav: function (callbackSuccess) {
                $http.get('/api/GetNav').success(callbackSuccess);
            },
            getCarsByBrand: function (brand, callbackSuccess) {
                $http.get('/api/GetByBrand/' + brand).success(callbackSuccess);
            },
            getCarsByCategory: function (category, callbackSuccess) {
                $http.get('/api/GetCarsByCategory/' + category).success(callbackSuccess);
            }
        }
    })
 .controller('ShowController', function ($scope, $http, carRepository) {
        $scope.chooseBrand = function (brand) {
            carRepository.getCarsByBrand(brand, function (result) {
                $scope.carsList = result;
            });
        };
        $scope.chooseBrand('All');

        $scope.find = function (category) {
            carRepository.getCarsByCategory(category, function (result) {
                $scope.carsList = result;
            })
        };
    })
  • Вопрос задан
  • 2343 просмотра
Решения вопроса 1
ruddy22
@ruddy22
Спасение утопающих — дело рук самих утопающих
вообще очень странно выглядит эта запись
из сервиса, мне кажется, нужно возвращать промис и обрабатывать его

попробуй сделать так (немного личной практики)
сервис
recovery: function(model){
        var request = $http.put(recoveryUrl.uriRecovery, {Email: model.Email, CaptchaHash: model.captchaHash, CaptchaValue: model.captchaValue});
        return request.then(function(success) {
          return success;
        }, function(error) {
          return error;
        })
      }

контроллер (не полный вариант кода)
$scope.recovery = function () {
      recovery.recovery($scope.model).then(
        function (response) {
          if (typeof response.status === "number") {
            if (response.status === 200) {
              $scope.recoverySuccess = localizedMessages.get("user.register.success");
            } else {
              if (typeof response.data === "object"){
                if (typeof response.data.errorCode === "number") {
                  if (response.data.errorCode !== 0) {
                    recoveryError = response.data;

что тут происходит?
в сервисе инитится запрос на сервер, данные возвращаются в контроллер по средствам отложенного объекта (промис), в контроллере я произвожу резолв промися и выковыриваю из него данные

в твоем случае, происходит почти тоже самое, только ты все это оборачиваешь в функцию-хелпер success, которая резолвит "удачный" промис.
я вот подумал, а может быть тебе стоит объявить $scope.carsList до того как ему будет присвоено значение???
воспользоваться замыканием?!
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@bagzon
Backend PHP, NodeJs, JS
Зачем callback если $http возвращает промисы, переделай на них, и смотри дальше
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы