我正在尝试通过一些javascript以编程方式触发ng-change事件。
这是我试图触发ng-change事件的元素
<select ng-model="user.siteId" name="siteSelect" ng-change="user.setSelectedSite(user.siteId)" class="ng-pristine ng-untouched ng-valid ng-empty">
<option value="" selected="selected">Please Select A Site</option>
<option id="siteOpts" value="1" ng-repeat="site in user.sites | orderBy:'siteName'" class="ng-binding ng-scope">Site1</option>
<option id="siteOpts" value="2" ng-repeat="site in user.sites | orderBy:'siteName'" class="ng-binding ng-scope">Site2</option>#
<option id="siteOpts" value="3" ng-repeat="site in user.sites | orderBy:'siteName'" class="ng-binding ng-scope">Site3</option>
</select>
我知道我可以使用此代码选择一个值
document.querySelector('.ng-pristine.ng-untouched.ng-valid.ng-empty').value = 2;
但是,这不会导致ng-change事件触发。
如何选择一个值并确保触发ng-change事件?
答案 0 :(得分:1)
根据文档
仅当输入更改时才评估ngChange表达式 值会导致将新值提交给模型。
它不会被评估:
- 如果$ parsers转换管道返回的值具有 不变
- 如果自模型以来输入仍然继续无效 将保持为空
- 如果通过编程方式更改了模型[strong],而不是通过 更改为输入值
注意,此指令要求ngModel为 礼物。
您可以做的是从控制器中手动调用函数
user.setSelectedSite(user.siteId)
或使用$ scope。$ watch。