Я только начал изучать 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>
замещать
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;
});
https://angularbackend.azurewebsites.net/api/Movies/Search?title=someTitle
в браузер, чтобы убедиться, что ваш бэкэнд отвечает правильно?