2017-01-06 17 views

回答

1

通常情况下,你应该能够通过使用ng-blur做到这一点,但由于某种原因,有一个在使用该指令与md-autocomplete一个问题:https://github.com/angular/material/issues/3906

但我想以不同的方式解决它,而不是最正确的方式,但它的作品。你需要做的就是在md-autocompleteinput中将事件绑定到blur。在这种情况下,您必须清除您的md-autocomplete的searchText。因此,只要绑定在你的控制器该事件在某种程度上这样的:

angular.element(document.querySelector('md-autocomplete input')).bind('blur', 
    function(){ 
     setTimeout(function(){ 
      angular.element(document.querySelector('md-autocomplete')).scope().ctrl.searchText = ''; 
      angular.element(document.querySelector('md-autocomplete')).scope().$apply(); 
     }, 300); 
    } 
) 

为什么我用超时的原因是事实,如果SEARCHTEXT变量被清除得太快,不添加芯片。但是当我加了300毫秒的延时后,它按我的预期工作。当然,有更好的办法可以做到这一点,但只要试着这样做,也许这对你来说就足够了。

这里是工作codepen:http://codepen.io/anon/pen/QdNydx

+0

感谢您的答复Patryk。它似乎没有工作。该函数永远不会在我的控制器中调用。我想这可能是因为我使用控制器作为语法。 vm = this;所以当我用我的vm.searchText替换ctrl.searchText时,它似乎没有任何效果 – Flash

+0

尝试在浏览器控制台中进行实验。尝试使用'angular.element(document.querySelector('md-autocomplete'))。scope()'并检查哪个变量是你的控制器,并确保你有正确的搜索文本变量 –

+0

而且,如果你附上你的代码它会更容易地帮助你:)plunkr,codepen或jsfiddle会帮助更多 –