Проблема со связью 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, время: 05:46. |