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

17

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

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

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

Вы знаете, как вызвать ng-изменение из внешнего углового?

    
задан htellez 20.06.2014 в 17:14
источник

2 ответа

4

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

Пример:

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

JavaScript:

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

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

    
ответ дан tymeJV 20.06.2014 в 17:20
источник
39

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

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

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

    
ответ дан claywhipkey 10.04.2015 в 18:26
источник