2014-12-21 3 views
-1

Я пытаюсь получить пользовательский ввод через текстовое поле с использованием ng-модели и добавить к базовому URL-адресу для вызова http.get, как показано ниже;Как обновить переменную контроллера с помощью «ng-model» AngularJS?

index.html:

<html ng-app='vidRoute'> 
    <head> 
     <meta charset="UTF-8"> 
     <meta name="viewport" content="width=device-width, initial-scale=1"> 
     <title>Search Video</title> 
     <link rel="stylesheet" href="app/css/custom/main.css"> 
     <link rel="stylesheet" href="app/css/custom/responsive.css"> 
    </head> 

    <body> 
     <div id='mainwrapper'> 
      <div id='header' ng-controller="searchController"> 
       <input type="text" id="searchTxt" ng-model="append"> 
       <a href="#/search" id="searchBtn">Search Video</a> 
      </div> 

      <div id="poster"> 
       <div ng-view></div> 
      </div> 
     </div>  

     <script type="text/javascript" src="app/javascript/vendor/jquery-2.1.1.js"></script> 
     <script type="text/javascript" src="app/javascript/vendor/angular.js"></script> 
     <script type="text/javascript" src="app/javascript/vendor/angular-route.js"></script> 
     <script type="text/javascript" src="app/javascript/vendor/angular-resource.js"></script> 
     <script type="text/javascript" src="app/javascript/vendor/angular-mocks.js"></script> 
     <script type="text/javascript" src="app/javascript/custom/searchcontroller.js"></script> 
     <script type="text/javascript" src="app/javascript/custom/vidRoute.js"></script> 
    </body> 
</html> 

searchcontroller.js

'use strict'; 

var vidcontrol = angular.module("vidcontrol", []); 

vidcontrol.controller("vidcontroller", ['$scope', '$http', function($scope, $http) { 
    $http.get('http://api.themoviedb.org/3/tv/airing_today?api_key=d5e87524383e2872a9555990b268dc5b').success(function(response) { 
     $scope.results = response.results; 
    }); 
}]); 

vidcontrol.controller('searchController', ['$scope', '$http', 
    function ($scope, $http) { 
     var url = "http://api.themoviedb.org/3/search/movie?api_key=d5e87524383e2872a9555990b268dc5b&query="; 
     // var searchTxt = $('#searchTxt').val();// this works fine when used 
     var searchUrl = url + append; //$scope.append also logs 'undefined' on the console 
     $http.get(searchUrl).success(function (response) { 
      $scope.searchResults = response.results;  
     }); 
    }]); 

, но я не получаю никакого ответа. когда я регистрирую searchUrl на консоли, я мог видеть, что append не обновлялся в соответствии со значением из текстового поля. Я совершенно новичок в Angular, и я не могу понять, что я делаю неправильно. Что мне делать, чтобы это исправить?

+0

Append не определен в коде ... Я уверен, что вам нужно прочитать его из '$ scope' с как вы его здесь написали. –

+0

Когда я использую $ scope.append, он дает «undefined». –

ответ

0

Теперь я вижу проблему. Когда контроллер загружен, он выполняет код контроллера. Это означает, что запрос REST выполняется до создания представления. Это причина, по которой вы видите неопределенную проблему. Решение заключается в определении метода в контроллере, который будет вызываться при нажатии «Поиск видео».

вид Update

<a href="#/search" id="searchBtn" ng-click="search()">Search Video</a> //Look at ng-click 

Контроллер Обновление:

vidcontrol.controller('searchController', ['$scope', '$http',function($scope, $http) { 
      var url = "http://api.themoviedb.org/3/search/movie?api_key=d5e87524383e2872a9555990b268dc5b&query="; 
      $scope.search = function(){ // Look at here, Defined a method to invoke on "Search Video" link click 
       var searchUrl = url + $scope.append; 
       $http.get(searchUrl).success(function(response) { 
        $scope.searchResults = response.results; 
       }); 
      }; 
     } ]); 
+0

, когда я использую var searchUrl = url + $ scope.append ;, У меня есть поискUrl = http://api.themoviedb.org/3/search/movie?api_key=d5e87524383e2872a9555990b268dc5b&query=undefined. это означает, что $ scope.append не определено –

+0

Я только что понял, что вы отправили код модуля «vidcontrol», и вы используете модуль «vidRoute» ( ", false) });