Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 21.06.2015, 19:23
Новичок на форуме
Отправить личное сообщение для Alex_D181 Посмотреть профиль Найти все сообщения от Alex_D181
 
Регистрация: 10.06.2015
Сообщений: 7

Проблема со связью 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">
    <div class="b-search-row">
        <form ng-submit="searchFilms()">
            <div class="col-md-12 relative">
                <input type="text" class="form-control" ng-model="searchName" placeholder="Ведите название фильма...">
                <input class="b-search-form-submit btn btn-primary" type="submit" value="поиск">
            </div>


        </form>

        <div class="row">
            <span class="col-md-12 h6 b-search_total_resul">Найдено фильмов: {{totalResul}}</span>
        </div>
    </div>
    <div class="b-result-row">
        <div class="b-result-item" ng-repeat="data in datas">
            <a href="#/item/{{data.id}}" class="b-item-film-search col-md-12">
                <span class="col-md-4">
                    <img style="width: 100%;" src="http://image.tmdb.org/t/p/w500/{{data.poster_path}}" alt=""/>
                </span>
                <span class="col-md-8">
                    <span class="h1">{{data.title}}</span>
                    <span class="h4">{{data.release_date}}</span>
                    <span class="descript">{{data.overview}}</span>
                </span>
            </a>
        </div>
    </div>
</div>
Суть проста, пользователь вводит название фильма, я спрашиваю по АПИ результаты поиска, обновляют глобальную переменную data результатом поиска, после чего вывожу результаты.

Самое главное, что работает вот эта конструкция:

$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">
    <div class="b-control b-control--no-bord">
        <a href="#/" class="btn btn-primary">К поиску</a>
        <a href="#/edit" class="btn btn-primary fl-r">Редактировать</a>
    </div>
    <div class="b-item-film col-md-12">
        <div class="b-poster col-md-4">
            <img src="" alt=""/>
        </div>
        <div class="b-descript col-md-8">
            <h1 class="h1">{{filmName}}</h1>
            <p class="h4">Дата релиза</p>
            <p class="descript">Описание фильма</p>
        </div>
    </div>
</div>

<script>

    var href = window.location.href;
    var splitHref = href.split('#/item/');
    //На самом деле создавать глобальную переменную, чтобы передать данные из одного контроллера в другой, не самая хорошая идея.
    //Но как сделать по-другому я пока не разобрался
</script>

ТУт тоже все просто, пользователь заходит на страницу, из урла мы получаем id фильма, по нему запрашиваем информацию, записываем её в переменную itemFilmData и вот тут получается странная особенность. Конструкция:

$scope.filmName = itemFilmData.original_title;

Не работает. Т.е. после получении ответа, и обновлении информации в переменной информация на сайте не обновляется. А должна.

Отсюда вопрос, в чем может быть причина, и почему в первом случае все работает, а во втором нет
Ответить с цитированием
  #2 (permalink)  
Старый 22.06.2015, 17:58
Интересующийся
Отправить личное сообщение для grego Посмотреть профиль Найти все сообщения от grego
 
Регистрация: 09.01.2012
Сообщений: 26

По поводу splitHref - у ангуляра есть встроенный сервис для работы с урлами $location, его нужно подключить как зависимость в свой контроллер (так же, как ты подключаешь $scope), и с помощью него можно будет распарсить урл и достать айдишку твоего фильма.

Относительно того, что не работает - если я правильно понимаю, то у тебя не обновляется $scope.filmName, которое биндится в темплейт.
В таком случае есть несколько вопросов:
1. $scope.filmName = itemFilmData.original_title; Я не вижу в твоем коде что за переменная-объект itemFilmData. Где он инициализируется и/или модифицируется?
2. метод $scope.setInfo - именно там по идее должен обновляться $scope.filmName, подскажи, этот метод вызывается? Значение APIres.original_title - это именно то, что ты хочешь установить для $scope.filmName? Что выводится в консоль в конце выполнения этого метода?
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сохранение формы при переходе на другое view. Alexej Angular.js 2 20.11.2014 14:45
Проблема с радио кнопками px379 Общие вопросы Javascript 8 29.07.2013 09:30
Проблема с обратной связью Flomaste:P Серверные языки и технологии 1 18.06.2011 10:46
mvc вызов модели из модели jetli13 Серверные языки и технологии 2 28.10.2010 12:09
Проблема спама lliberty AJAX и COMET 1 12.03.2009 16:47