Подтвердить что ты не робот

Как вызвать ng-изменение из jquery?

У меня есть тег select следующим образом:

<select ng-change="doSomething()" ng-model="myModel"> </select>

и я использую для него элемент управления jQueryUI (combobox), событие "change", вызванное jQuery, не вызывает doSomething().

Вы знаете, как вызвать ng-изменение извне angular?

4b9b3361

Ответ 1

Ugh - это ужасная практика, но вы можете использовать angular.element и получить scope от элемента, который находится в целевом контроллере.

Пример:

<div ng-controller="myApp">
    <span id="test"></span>
</div>

JavaScript:

var scope = angular.element("#test").scope();
scope.doSomething();

Теперь ваша переменная scope имеет доступ ко всем методам, определенным в контроллере myApp.

Ответ 2

Вопрос заключается не в том, как запустить некоторый код, а в том, как инициировать событие изменения. Я нашел angular -дружественный способ сделать это. У меня есть слайдер jQuery UI, который изменяет значение другого ввода, на котором есть ng-изменение. Секрет в том, что как только вы превратите его в элемент angular. Теперь у вас есть доступ к методу triggerHandler. Из того, что я видел, использование этого не будет считаться плохой практикой:

angular.element(document.getElementById('test')).triggerHandler('change');

Ответ tymeJV сделал angular.element("#test") напрямую, не используя jQuery, но я получил консольную ошибку и сломанную функциональность таким образом. Эта версия работает без каких-либо зависимостей.