@andy301086

Не обновляется отображение из scope в Angular?

Всем привет. Недавно начал изучать Angular и писать небольшое приложение. Столкнулся с небольшой проблемой.
У меня есть страница, на которой выводится список элементов, этот список формируется в зависимости от выбранного фильтра (т.е. выбирают по ссылке имя города и через запрос получаются данные с сервера). Код контроллеров и разметки представлен ниже:

<section id="showcase" ng-show="catalogShow == true">
    <div class="container fadeOut">
        <div class="row wow fadeInDown" data-wow-duration="500ms">
            <div class="col-lg-12">
                <!-- section title -->
                <div class="title text-center">
                    <h2>Каталог <span class="color"></span></h2>
                    <div class="border"></div>
                </div>
                <!-- /section title -->
                <!-- portfolio item filtering -->
                <div class="portfolio-filter clearfix" ng-controller="Filter">
                    <ul class="text-center">
                        <li><a href="javascript:void(0)" ng-click="filterByCategory(-1)" class="filter" data-val="-1" data-filter="all">Все</a></li>
                        <li><a href="javascript:void(0)" ng-click="filterByCategory(1)" class="filter" data-val="1" data-filter=".march8">8 Марта</a></li>
                        <li><a href="javascript:void(0)" class="filter" data-val="15" data-filter=".happyBirtday">День Рождение</a></li>
                        <li><a href="javascript:void(0)" class="filter" data-val="48" data-filter=".romance">Романтика</a></li>
                        <li><a href="javascript:void(0)" class="filter" data-va="14" data-filter=".rose">Розы</a></li>
                        <li><a href="javascript:void(0)" class="filter" data-val="" data-filter=".toys">Игрушки</a></li>
                    </ul>
                </div>
                <!-- /portfolio item filtering -->
            </div> <!-- /end col-lg-12 -->
        </div> <!-- end row -->
    </div>	<!-- end container -->
    <!-- portfolio items -->
    <div class="portfolio-item-wrapper wow fadeInUp" data-wow-duration="500ms">
        <ul id="og-grid" class="og-grid">
            <!-- single portfolio item -->
            <li class="mix app fadeInUp flowerItem" data-wow-duration="500ms" ng-repeat="item in catalogItems">
                <a href="javascript:void(0)" data-largesrc="http://staging.test.ru{{item.MainImageUrl}}" data-title="{{item.Name}}" data-description="{{item.Name}}">
                    <img ng-src="http://staging.test.ru{{item.MainImageUrl}}" alt="{{item.Name}}" class="size-300x250">
                    <div class="hover-mask">
                        <h3>{{item.Name}}</h3>
                        <span>
                            <i class="fa fa-plus fa-2x"></i>
                        </span>
                    </div>
                </a>
            </li>
        </ul> <!-- end og grid -->
    </div>  <!-- portfolio items wrapper -->
</section>   <!-- End section -->


AngularJS

flApp.controller('Filter', function ($scope, $http) {
    $scope.catalogItems = [];
    
    $scope.filterByCity = function (cityId) {
        $scope.catalogShow = true;
        $scope.selectedCity = cityId;
        var urlString = 'http://staging.test.ru/RegionId=' + cityId;

        $http({
            url: urlString,
            headers: { " },
            method: 'GET'
        }).success(function (data, status, headers, config) {
            $scope.catalogItems = data.Items;
        });
    };
    
    $scope.filterByCategory = function (categoryId) {
        var urlString = 'http://staging.test.ru/partnerRegionId=' + $scope.selectedCity;
        $http({
            url: urlString,
            headers: { * },
            method: 'GET'
        }).success(function (data, status, headers, config) {
            $scope.catalogItems = data.Items[0];
        });
    };
});


Урлы указаны тестовые. Когда срабатывает filterByCity то отображение обновляется, когда срабатывает filterByCategory, то отображение не срабатывает (хотя функция выполняется). Что то значит делаю не так. Хотелось бы получить ответ что не так, и почему? Заранее спасибо всем кто прочел этот вопрос.
  • Вопрос задан
  • 1289 просмотров
Решения вопроса 1
@enixpp
Вы уверены что сервер вернет 200?
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
$scope.catalogItems = data.Items[0];

меня оочень смущает эта конструкция... консоль точно не ругается ни на что?
Ответ написан
@lega
В каталоге в итоге массив лежит или нет?
$scope.catalogItems = [data.Items[0]];
Ответ написан
во-первых, из приведенного кода вижу, что у Вас <h3>{{item.Name}}</h3> находится вне контроллера. возможно, у Вас есть еще один, внешний контроллер
если с контроллерами все ОК, то попробуйте сделать $scope.$apply() после обновления данных, но это dirtyhack. недвано наткнулся на SefeApply https://coderwall.com/p/ngisma/safe-apply-in-angular-js
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы