Выберите выбранный элемент снова из поля выбора angular

Допустим, у меня есть следующее основное поле выбора html.

<select ng-model="selectedOption" ng-change="showSelected()">
    <option value="">Select Option</option>
    <option value="option-1">Option 1</option>
    <option value="option-2">Option 2</option>
</select>

И следующий контроллер:

$scope.showSelected = function () {
        console.log('Selected');
        //TODO
    }

Здесь, скажем, я сначала выбираю «вариант-1», а затем будет консольный журнал. Теперь я хочу снова выбрать тот же элемент и снова запустить функцию. Однако функция showSelected() не будет запущена, потому что я не изменил модель, это снова «вариант-1».

Директива «ng-click» также не работает в поле выбора. Поэтому я не могу запустить функцию с помощью ng-click.

Каково угловое решение для этой конкретной проблемы?


person SchemeSonic    schedule 31.03.2016    source источник
comment
*А еще я не хочу использовать $watcher   -  person SchemeSonic    schedule 31.03.2016
comment
Почему вы хотите запустить его снова? Поскольку действие уже выполнено начальным обработчиком ng-change..   -  person Rayon    schedule 31.03.2016
comment
Привет @haldun - просто краткое примечание - вы можете отредактировать исходный пост, если хотите внести изменения/дополнения, щелкнув ссылку edit< /a> прямо под списком тегов.   -  person Lix    schedule 31.03.2016
comment
Вы пробовали другой обработчик событий, возможно, ng-click — это то, что вы ищете.   -  person fubbe    schedule 31.03.2016
comment
Можете ли вы использовать ng-blur для своего элемента   -  person joyBlanks    schedule 31.03.2016


Ответы (2)


Вот обходной путь. JSFIDDLE

<div ng-controller="MyCtrl">
selected val={{}}
 <select ng-model="selectedOption" ng-mouseup="showSelected()">
    <option value="">Select Option</option>
    <option value="option-1">Option 1</option>
    <option value="option-2">Option 2</option>
</select>
</div>



function MyCtrl($scope) {
    $scope.open=false;
    $scope.showSelected = function () {
    if($scope.open) {
    // here s your code for select
        console.log('Selected');
    }
    $scope.open=!$scope.open;
    }
}
person Naeem Shaikh    schedule 31.03.2016
comment
спасибо за верный ответ. Как насчет события touch вместо mouseup? Буду использовать на планшете. - person SchemeSonic; 31.03.2016
comment
Я проверил это на симуляторе Windows с сенсорным событием, оно работает - person SchemeSonic; 31.03.2016
comment
Привет, Наим, твой ответ неверен. Вместо выбора элемента из поля выбора, если вы отмените действие выбора, вы не сможете снова открыть поле выбора. - person SchemeSonic; 31.03.2016
comment
Чтобы создать его, щелкните поле выбора, а затем вместо выбора варианта 1 или варианта 2 щелкните где-нибудь еще на странице, чтобы отменить действие. Затем раскрывающийся список будет отменен и закрыт. А потом попробуйте снова открыть selectbox, он не открывается. - person SchemeSonic; 31.03.2016

Почему вы хотите еще раз вызвать событие? Если вам нужно это сделать, просто сбросьте поле выбора, после чего событие будет запущено снова.

person Laurent Pitteloud    schedule 31.03.2016
comment
Это неверный ответ. Я хочу использовать его как кнопку, подумайте, что я хочу снова щелкнуть выбранный элемент, чтобы вызвать ту же функцию, не меняя выбранный элемент. - person SchemeSonic; 31.03.2016
comment
Хорошо, возможно, попробуйте подумать по-другому: не используйте собственный выбор элемента html, а моделируйте его в html/css с помощью ul, содержащего элементы ‹a›, с которыми вы можете использовать события ng-click! - person Laurent Pitteloud; 31.03.2016