Я работаю над NgForm, у которого должна быть кнопка «Сбросить все поля». Я могу получить доступ к NgForm.reset() для сброса большинства полей. Но у меня есть несколько экземпляров пользовательского компонента множественного выбора, который исключен из метода сброса.
Пользовательский множественный выбор — это просто <angular2-multiselect> с прикрепленными к нему <items>, и у него есть кнопка «X», которая очистит его значение (я), что отлично работает. Это происходит через (onDeSelectAll) = "onDeSelectAll($event) на <angular2-multiselect>.
Я пытаюсь запустить этот метод с другой кнопки внутри того же NgForm. Но я не могу понять, как это сделать. Я тоже пытался сделать свой собственный метод
<multiselect name = "myMultiselect"/>
// Lots of options
<button (click) = "myMultiselect.onDeSelectAll($event)"/>
// or
<button (click) = "ResetMultiSelect($event)"/>
Я также пытался сделать свой собственный код, который делает то же самое. Вот как я пытаюсь сделать это в машинописи:
public myMultiselect : MultiSelect;
function ResetMultiSelect(items: any)
{
myMultiselect.selectedItems = items;
// or
this.myForm.myMultiselect.selectedItems = items;
}
Я пытался установить myMultiselect.selectedItems значение null, undefined и [] (пустой массив). Из трех только [] работает. Но когда я смотрю в инспекторе, он говорит мне, что this.selectedItems.split is not a function. Таким образом, хотя я получаю желаемый результат таким образом, я получаю его неправильно.
Итак, мой вопрос в основном либо
A: Есть ли способ установить selectedItems моего multiselect как нечто, очищающее все параметры функции, запускаемой button?
или Б:
Есть ли хороший способ для моей кнопки найти и вызвать мой метод multiselectComponentonDeSelectAll()?





Используйте переменные шаблона angular, чтобы получить ссылку на ваш угловой компонент. Затем вы можете легко вызвать общедоступный метод, который вам нравится, для вашего дочернего компонента, например:
<multiselect #myMultiselect></multiselect>
<button (onClick) = "myMultiselect.onDeSelectAll($event)">Click Here</button>
Вы также можете использовать декоратор @ViewChild в своем компоненте .ts, чтобы получить нужный компонент по заданной переменной шаблона.
Это было прекрасно.
$event, который я получил, сделав это таким образом, не работал сonDeSelectAll(), поэтому я просто создал новый метод в своем машинописном тексте, который устанавливает выделение в пустой массив вместоmyMultiselect.selectedItems = [], а затем обновил представление. Затем я вызвал этот метод из моей кнопки, как в вашем примере.