如何从jquery触发ng-change?

时间:2014-06-20 15:14:05

标签: angularjs

我有一个select标签,如下所示:

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

我正在使用jQueryUI控件(组合框),从jQuery触发的事件“更改”不会触发doSomething()。

你知道如何从外部角度触发ng-change?

2 个答案:

答案 0 :(得分:54)

问题不在于如何运行某些代码,而在于如何触发更改事件。我找到了一种角度友好的方式来做到这一点。我有一个jQuery UI滑块,可以更改另一个输入的值,该输入上有ng-change。秘诀是,一旦你将它变成一个angular.element,你现在可以访问一个名为triggerHandler的方法。根据我所见,使用它不会被视为不良做法:

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

tymeJV的答案在不使用jQuery的情况下直接进行了angular.element("#test"),但我得到了一个控制台错误和破坏的功能。这个版本没有任何依赖性。

答案 1 :(得分:5)

呃 - 这是一种可怕的做法 - 但你可以使用angular.element并从位于目标控制器中的元素中获取scope

示例:

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

使用Javascript:

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

您的scope变量现在可以访问myApp控制器上定义的所有方法。