With the help of this answer, I got it working as (I hope) you expect.
http://plnkr.co/edit/f9RaRXjhWZGbTVn0JRno?p=preview
HTML
<!DOCTYPE html>
<html ng-app="app">
<head>
<link data-require="bootstrap-css@3.3.6" data-semver="3.3.6" rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.css" />
<script data-require="angular.js@*" data-semver="1.5.0" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.0/angular.js"></script>
<script data-require="underscore.js@*" data-semver="1.8.3" src="//cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore- min.js"></script>
<script src="script.js"></script>
</head>
<body ng-controller="mainCtrl" class="container">
<div class="panel panel-primary well">
Input:
<input type="text" ng-model="inputText" />
</div>
{{finalText}}
</body>
</html>
JS
angular.module('app', []);
angular.module('app').controller('mainCtrl', function($scope) {
$scope.inputText = "";
$scope.$watch("inputText", _.debounce(function (text) {
$scope.$apply(function(){
$scope.finalText = text;
});
}, 1000));
});