2017-01-06 3 views

ответ

1

Как правило, вы должны быть в состоянии сделать это с помощью ng-blur, но по какой-то причине есть проблема с этой директивой в использовании с md-autocomplete: https://github.com/angular/material/issues/3906

Но я пытался решить эту проблему по-другому, не самый правильный путь, но он работает. Что вам нужно сделать, это связать событие с blur в input внутри md-autocomplete. В этом случае вам нужно очистить свой searchText из md-autocomplete. Так просто связать это событие в контроллере как-то так:

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; поэтому, когда я заменил ctrl.searchText на мой vm.searchText, он, похоже, не имеет никакого эффекта. – Flash

+0

Попробуйте поэкспериментировать в консоли вашего браузера. Попытайтесь использовать 'angular.element (document.querySelector ('md-autocomplete')). Scope()' и проверить, какая переменная является вашим контроллером, и убедитесь, что у вас есть правильная текстовая переменная поиска –

+0

А также, если вы присоедините свой код вам будет легче помочь:) plunkr, codepen или jsfiddle помогли бы еще больше –