var app = angular.module('plunker', ['rx']);
app.controller('MainCtrl', function($scope, rx, $http, observeOnScope) {
observeOnScope($scope, 'search')
.throttle(5000)
.map(function(change){
return change.newValue || "";
})
.distinctUntilChanged() // Only if the value has changed
.flatMapLatest(searchWikipedia)
.safeApply($scope, function(result) {
console.log('render');
$scope.results = [];
for(var i=0, ii = result.data[1].length; i<ii; i+=1){
$scope.results.push({
title: result.data[1][i],
url: result.data[3][i]
});
}
})
.subscribe();
function searchWikipedia(term) {
return rx.Observable.fromPromise($http({
url: "http://en.wikipedia.org/w/api.php?&callback=JSON_CALLBACK",
method: "jsonp",
params: {
action: "opensearch",
search: encodeURI(term),
format: "json"
}
}));
}
});
<!DOCTYPE html>
<html ng-app="plunker">
<head>
<meta charset="utf-8" />
<title>AngularJS Plunker</title>
<script>document.write('<base href="' + document.location + '" />');</script>
<link rel="stylesheet" href="style.css" />
<script data-require="angular.js@1.4.x" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.5/angular.min.js" data-semver="1.4.5"></script>
<script data-require="rxjs@*" data-semver="2.5.3" src="//cdnjs.cloudflare.com/ajax/libs/rxjs/2.5.3/rx.all.js"></script>
<script data-require="rx.angular.js@*" data-semver="0.0.14" src="https://cdn.rawgit.com/Reactive-Extensions/rx.angular.js/v0.0.14/dist/rx.angular.js"></script>
<script src="app.js"></script>
</head>
<body ng-controller="MainCtrl">
<div>
Wikipedia Search
<input type="text" ng-model="search" />
<ul>
<li ng-repeat="result in results"><a href="{{result.url}}">{{result.title}}</a></li>
</ul>
</div>
</body>
</html>
/* Put your css in here */