As said previously, you could try to get the input value and check if exists in list, if the value isn't in the list the optional input will be shown.
$scope.shouldHide = function(index) {
//get the typeahead input value:
var nameInput = document.getElementsByName('name')[0]
var nameValue = null
if (nameInput){
nameValue=document.getElementsByName('name')[0].value;
}
if (nameValue){
//check if typeahead input value is in list
$scope.names = ['User 1', 'User 2', 'User 3', 'User 4', 'User 5', 'User 6'];
return $scope.names.indexOf(nameValue) >=0
}
return true;
};
I fork your fiddle and added the explained behaviour here: http://jsfiddle.net/nachoorme/RZK9u/1/