Я новичок в angular, и я начинаю бороться с этой кривой обучения.
Я работаю над Zipline FreeCodeCamp, чтобы создать приложение для поиска в Википедии. Одной из необходимых функций является поиск в реальном времени с предложениями названий статей, но я не могу заставить его работать.
Я создал фабрику для вызова вики-API. Фабрика сработает только один раз и не будет обновляться при внесении каких-либо изменений в поле поиска. Я предполагаю, что это не работает, потому что фабрика не вызывается, когда в поле ввода вносятся изменения, но все, что я пытался исправить, похоже, не работает.
HTML
<section id="container" ng-app="wikiSearch" ng-controller="searchPanel" class="center">
<h1>Wikipedia Viewer</h1>
<input id="search" type="text" placeholder="search" ng-model="searchTerm" ng-model-options="{debounce: 300}"/>
<section id="results"><a href="#" target="_blank" class="wiki-entry"> </a>
<!-- test code-->
<div>{{searchTerm}}</div>
<div>{{titleSearch}}</div>
</section>
</section>
JavaScript
var app = angular.module('wikiSearch', []);
app.controller('searchPanel', [ '$scope', 'API', function ($scope, API) {
$scope.searchTerm = 'einstein';
$scope.titleSearch = {};
$scope.searchResults = {};
var api_base = "https://en.wikipedia.org/w/api.php?";
var fullParams = "format=json&action=query&generator=search&gsrnamespace=0&gsrlimit=30&prop=extracts&exintro&explaintext&exsentences=2&exlimit=max&gsrsearch="
//var titles = "format=json&action=query&generator=search&gsrnamespace=0&gsrlimit=8&gsrsearch="
var callback = "&callback=JSON_CALLBACK"
API.search(api_base + fullParams + $scope.searchTerm + callback).success(function (data) {
$scope.titleSearch = data;
});
}]);
app.factory('API', [ '$http', function ($http) {
return {
search: function(targetUrl) {
console.log(targetUrl);
return $http.jsonp(targetUrl);
}
}
}]);
Вот исходный код, на который можно посмотреть: Проект Codepen.
Вы можете видеть, что любые изменения в поле поиска не приводят к каким-либо изменениям в возвращаемых данных json. Фабрика вызывается только один раз.
У меня нет большого понимания того, как работает angular, но я предполагал, что фабрика будет обновляться в области действия с каждым изменением, внесенным в поле ввода. Очевидно, я ошибаюсь, но я хотел бы точно знать, почему и как это исправить.