我有一個選擇標記,如下所示:如何從jquery中觸發ng-change?
<select ng-change="doSomething()" ng-model="myModel"> </select>
,我使用它(組合框)一jQueryUI的控制,從jQuery的觸發事件「變革」不會觸發DoSomething的()。
你知道如何從外部角度觸發ng變化嗎?
我有一個選擇標記,如下所示:如何從jquery中觸發ng-change?
<select ng-change="doSomething()" ng-model="myModel"> </select>
,我使用它(組合框)一jQueryUI的控制,從jQuery的觸發事件「變革」不會觸發DoSomething的()。
你知道如何從外部角度觸發ng變化嗎?
呃 - 這是可怕的做法 - 但您可以使用angular.element
並從駐留在目標控制器中的元素獲取scope
。
實施例:
<div ng-controller="myApp">
<span id="test"></span>
</div>
使用Javascript:
var scope = angular.element("#test").scope();
scope.doSomething();
你scope
變量現在可以訪問myApp
控制器上定義的所有方法。
問題不在於如何運行某些代碼,而是如何觸發change事件。我發現了一個角度友好的方式來做到這一點。我有一個jQuery UI滑塊,它可以改變另一個輸入的值,這個輸入具有ng變化。祕訣是,一旦你把它變成一個angular.element,你現在可以訪問一個名爲triggerHandler的方法。從我所看到的,使用該不會被認爲是不好的做法:
angular.element(document.getElementById('test')).triggerHandler('change');
tymeJV的回答做了angular.element("#test")
的情況下直接使用jQuery的,但我有一個控制檯錯誤和破碎功能的方式。此版本沒有任何依賴關係。
如果這是可怕的做法,那麼如何處理在服務器上填充了默認值的輸入元素? – Lawyerson
@BrowLawyerson - 不要填充輸入的「value」屬性 - 而是通過Angular解析服務器值,並將其分配給正確的'ngModel'變量。 – tymeJV
這隻適用於調試模式。 angular.element(「#id」)。scope()在發佈模式下不可用。請參閱「從DOM中檢索範圍」一節。 [鏈接](https://docs.angularjs.org/guide/scope) – Cesar