I have Angular directive. Something like multiselect with search. I want to clear query after click on clear icon. Here is the code:
Template:
<div multiselect>
<ul role="container">
<li ng-repeat="(k,v) in ::propertyModel.getAllowedValues()" ng-show="isSelected(k);">
{{v}}
<span class="icon-close" ng-click="handleOptionRemove(k);" ng-show="!singleSelect"></span>
</li>
</ul>
<div role="opener" class="icon-plus"></div>
<div role="dropdown" class="closed">
<div role="search">
<span class="icon-magnifier"></span>
<span class="icon-close" ng-click="handleSearchClear();"></span>
<input type="text" placeholder="Type to search">
</div>
<ul role="options">
<li ng-repeat="(k,v) in ::propertyModel.getAllowedValues()" ng-show="!isSelected(k) && found(k);" ng-click="handleOptionSelect(k);">{{v}}</li>
<li disabled ng-show="foundItems.length === 0 && queryString !== ''">There is no results found</li>
</ul>
</div>
</div>
Directive:
var input= element.find('input');
[...]
function handleSearchInput(){
scope.foundItems= [];
scope.queryString= input[0].value.toLocaleUpperCase();
for(var o in allowedValues) if(allowedValues.hasOwnProperty(o))
if(allowedValues[o].toLocaleUpperCase().indexOf(scope.queryString)!== -1)
scope.foundItems.push(o);
scope.$apply();
}
[...]
scope.handleSearchClear = function(){
input[0].value='';
input.triggerHandler('input');
};
[...]
input.bind('input', handleSearchInput);
After click i have
Error: [$rootScope:inprog] $apply already in progress[...]
on console.
How can i properly 'clear' this input's value?
ngModelon the input and then clear it via$scope?$timeoutinstead of calling$apply()