Проблема со связью view и модели
Есть сайт, который ищет фильмы из базы по названию, а потом показывает описание. Приложение состоит из двух контроллеров, каждый на своём шаблоне. Один и тот же функционал реализован в обоих контроллерах, но в первом он работает, а во втором нет:
Код первого контроллера: filmApp.controller('searchFilmCtrl', function($scope){ $scope.datas = data.results; $scope.totalResul = data.total_results; $scope.itemId = data.id; $scope.searchFilms = function(){ function successCB(APIres) { APIres = JSON.parse(APIres); $scope.setFilms(APIres) }; function errorCB(resul) { console.log("Error callback: " + APIres); }; theMovieDb.search.getMovie({"query": $scope.searchName }, successCB, errorCB) }; $scope.datas = data.results; $scope.setFilms = function(APIres){ $scope.datas = APIres.results; $scope.totalResul = APIres.total_results; console.log($scope.totalResul); } }); И его шаблон Код:
<div class="b-wrapper" ng-controller="searchFilmCtrl"> Самое главное, что работает вот эта конструкция: $scope.totalResul = data.total_results; Дальше второй шаблон: filmApp.controller('itemFilmCtrl', function($scope){ $scope.filmName = itemFilmData.original_title; $scope.getInfoAboutFilm = function(){ function successCB(APIres){ APIres = JSON.parse(APIres); $scope.setInfo(APIres) } function errorCB(APIres){ console.log("Error callback: " + APIres); } theMovieDb.movies.getById({"id": ''+splitHref[1]+'' }, successCB, errorCB) }(); $scope.setInfo = function(APIres){ $scope.filmName = APIres.original_title; console.log($scope.filmName); }; HTML Код:
<div class="b-wrapper" ng-controller="itemFilmCtrl"> ТУт тоже все просто, пользователь заходит на страницу, из урла мы получаем id фильма, по нему запрашиваем информацию, записываем её в переменную itemFilmData и вот тут получается странная особенность. Конструкция: $scope.filmName = itemFilmData.original_title; Не работает. Т.е. после получении ответа, и обновлении информации в переменной информация на сайте не обновляется. А должна. Отсюда вопрос, в чем может быть причина, и почему в первом случае все работает, а во втором нет |
По поводу splitHref - у ангуляра есть встроенный сервис для работы с урлами $location, его нужно подключить как зависимость в свой контроллер (так же, как ты подключаешь $scope), и с помощью него можно будет распарсить урл и достать айдишку твоего фильма.
Относительно того, что не работает - если я правильно понимаю, то у тебя не обновляется $scope.filmName, которое биндится в темплейт. В таком случае есть несколько вопросов: 1. $scope.filmName = itemFilmData.original_title; Я не вижу в твоем коде что за переменная-объект itemFilmData. Где он инициализируется и/или модифицируется? 2. метод $scope.setInfo - именно там по идее должен обновляться $scope.filmName, подскажи, этот метод вызывается? Значение APIres.original_title - это именно то, что ты хочешь установить для $scope.filmName? Что выводится в консоль в конце выполнения этого метода? |
Часовой пояс GMT +3, время: 11:26. |