Угловая проблема с $ http.get

0

Я только начал изучать Angular, и у меня возникли проблемы с получением данных на основе запроса http-get. Он работает, когда я просто извлекаю все фильмы, но не тогда, когда я пытаюсь получить фильмы на основе поискового запроса (cfr. Search.html). Надеюсь, кто-то скажет мне, где я ошибся, я действительно не вижу этого. Заранее спасибо.

app.js:

var app;

(function() {

  app = angular.module('imdb', ['ngRoute']);

  app.config(function($routeProvider) {
    $routeProvider
      .when('/search', {
        controller: 'SearchController',
        templateUrl: 'views/search.html' 
      })
      .when('/movies', {
        controller: 'MovieController',
        templateUrl: 'views/movies.html' //works fine
      })
      .otherwise({
        redirectTo: '/movies'
      });
  });
})();

SearchController.js

(function (app) {

  app.controller('SearchController', ['$http', '$scope', function ($http, $scope) {
    $scope.movies = [];

    $scope.searchMovie = function(title) {
      $http.get('https://angularbackend.azurewebsites.net/api/Movies/Search?title=' + title)
        .success(function(data) {
          $scope.movies = data;
        });
    };
  }]);
})(app);

search.html

<div>
  <form class="form" novalidate name="searchMovies" ng-submit="SearchController.searchMovie(title)" >
    <input type="text" ng-model="title" class="form-control" placeholder="enter title">
    <button type="submit" class="btn btn-primary btn-block">Search</button>
  </form>
  <table class="table">
    <thead>
    <tr>
      <th>poster</th>
      <th>title</th>
    </tr>
    </thead>
    <tbody>
    <tr ng-repeat="movie in movies">
      <td>{{ movie.title }}</td>
    </tr>
    </tbody>
  </table> 
</div>
  • 0
    Вы пытались вставить https://angularbackend.azurewebsites.net/api/Movies/Search?title=someTitle в браузер, чтобы убедиться, что ваш бэкэнд отвечает правильно?
  • 0
    Что бездарно не работает? Вы получаете неправильные данные? Или ваш вызов APi просто не сработал, вы получаете 404 или ваш заголовок пуст при вызове ...?
Теги:
search
http-get

1 ответ

1
Лучший ответ

замещать

SearchController.searchMovie(title)

от

searchMovie(title)

Все выражения всегда оцениваются по объему. Итак, первый, неправильный, попытается вызвать метод searchMovie из $scope.SearchController, которого не существует.

Также обратите внимание, что success() устарел уже довольно давно. Используйте then():

$http.get('https://angularbackend.azurewebsites.net/api/Movies/Search?title=' + title)
    .then(function(response) {
      $scope.movies = response.data;
    });

Вы также должны избегать использования конкатенации строк для передачи параметров. Они должны быть закодированы должным образом. Так что скорее используйте

$http.get('https://angularbackend.azurewebsites.net/api/Movies/Search', {params: {title: title}})
    .then(function(response) {
      $scope.movies = response.data;
    });

Ещё вопросы

Сообщество Overcoder
Наверх
Меню