mdDialog покажет дважды в AngularJS md-autocomplete - PullRequest
0 голосов
/ 26 сентября 2018

я использую md-autocomplete, чтобы показать данные пользователю

  <form name="searchForm" ng-submit="$event.preventDefault()">
                <md-autocomplete
                    md-no-cache="true"
                    md-selected-item="ctrl.selectedItem"
                    md-search-text="ctrl.searchText"
                    md-items="item in ctrl.querySearch(ctrl.searchText)"
                    md-item-text="item.display"
                    md-min-length="0"
                    placeholder="enter Name"
                    md-search-text-change="ctrl.searchTextChange(ctrl.searchText)"
                    md-selected-item-change="ctrl.selectedItemChange(item,$event)"
                    >
                    <md-item-template>
                        <span md-highlight-text="ctrl.searchText" md-highlight-flags="^i">{{item.display}}</span>
                    </md-item-template>

                    <md-not-found>
                       not found anything!
                    </md-not-found>
                </md-autocomplete>
            </form>

, когда пользователь нажимает на результат, он отображается во всплывающем окне, используя $ mdDialog

 function selectedItemChange(item,ev) {

    $mdDialog.show({
        locals: { drugData: item },
        controller: DialogController,
        templateUrl: 'DIALOG.TMPL.html',
        parent: angular.element(document.body),
        targetEvent: ev,
        clickOutsideToClose: true,
        fullscreen: false  
    });
    self.selectedItem = '';

}  

я использую self.selectedItem = '';очистить текст поиска после щелчка пользователя, но это приводит к тому, что $ mdDialog показывается дважды, а элемент, переданный в диалоговое окно, становится пустым во второй раз. Как я могу предотвратить показ диалогового окна дважды?
существует ли что-то вроде md-selected-item-click?
Я хочу показать диалог, когда пользователь нажимает на результат, и это происходит только один раз

1 Ответ

0 голосов
/ 26 сентября 2018

Функция selectedItemChange включается дважды, когда пользователь выбирает значение автозаполнения (элемент) & "self.selectedItem = '';".Добавьте проверку внутри функции selectedItemChange, является ли значение элемента пустым или неопределенным.

function selectedItemChange(item,ev) {
  if(item !== '' && item !== undefined) {
    $mdDialog.show({
        locals: { drugData: item },
        controller: DialogController,
        templateUrl: 'DIALOG.TMPL.html',
        parent: angular.element(document.body),
        targetEvent: ev,
        clickOutsideToClose: true,
        fullscreen: false  
    });
  }
    self.selectedItem = '';

}  

Приведенный выше код должен работать и видеть только один диалог.И если элемент, переданный в диалог, все еще пуст, тогда передайте копию элемента в диалог.то есть .., Angular.copy (элемент) или Object.assign ({}, элемент)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...