У меня есть поле выбора нескольких элементов, созданное в Angular js со значениями из базы данных, некоторые из которых предварительно выбраны, если они отвечают определенным условиям.Предотвращение ng-select при стрельбе, когда фокус потерян
fooSearch.html
<select multiple ng-model="foo">
<option ng-repeat="item in fooList"
value="{{item.id}}"
ng-selected="fooIsSelected(item.id)">
{{item.label}}
</option>
</select>
fooSearch-dctv.js
scope.foo = [];
scope.fooIsSelected = function(id){
var isBar = PermissionsFxty.hasPermission('A_PERM') && (id == "15" || id == "16" || id == "17");
var isBaz = PermissionsFxty.hasPermission('B_PERM') && (id == "1" || id == "3");
if((isBar || isBaz) && scope.foo.indexOf(id) == -1){scope.foo[scope.foo.length] = id;}
return isBar || isBaz;
};
Вопрос заключается в том, что всякий раз, когда другой элемент фокус fooIsSelected(id)
увольняют и повторно выбирает любые предметы, которые, возможно, были невыбранные пользователем. Это происходит независимо от того, какие параметры пользователь выбрал или не выбрал до того, как поле мультиселектора потеряет фокус. Почему он это делает? Есть ли способ предотвратить это с размещением $watch
на scope.foo
и установкой флага?
'выбрать multiple' является обычно неудобный пользовательский интерфейс; не каждый понимает, что несколько элементов можно выбрать, посмотрев на него. Я бы предложил заменить его флажками. Тем не менее, [ngModelOptions] (https://docs.angularjs.org/api/ng/directive/ngModelOptions) может быть тем, что вы ищете. – Blazemonger
После некоторого тестирования я обновил свой вопрос. Проблема возникает, когда другой элемент получает фокус. Не тогда, когда поле выбора теряет фокус. –