Javascript 如何获取触发ng更改的DOM元素?

Javascript 如何获取触发ng更改的DOM元素?,javascript,angularjs,Javascript,Angularjs,我用的是angularJS。我的页面上有几个元素,每个元素都有自己的ng change,例如: <select id="hairColorComponent" ng-model="hairColor" ng-options="option.name for option in hairColorData" ng-change="updateUserData()"> 我希望能够确定从updateUserData函数中更新了哪个DOM元素,而无需手动

我用的是angularJS。我的页面上有几个
元素,每个元素都有自己的
ng change
,例如:

<select id="hairColorComponent" ng-model="hairColor"
        ng-options="option.name for option in hairColorData"
        ng-change="updateUserData()">

我希望能够确定从
updateUserData
函数中更新了哪个DOM元素,而无需手动将其指定为每个
ng change
属性的参数

是否有
事件
,或
调用方
或类似的事件,我可以在
updateUserData
的上下文中使用

希望类似于
ng change=“updateUserData(调用者)”

这样的东西没有(简单的)设计方法来实现这一点。角度控制器应该与DOM完全分离,因此,如果您发现自己需要在其中引用DOM,则可能是以错误的方式处理问题

如果你的HTML是

<select id="hairColorComponent" ng-model="hairColor"
        ng-options="option.name for option in hairColorData"
        ng-change="updateUserData()">

然后更改选择将更改控制器中
$scope.hairColor
的值。在
updateUserData()
中,只需读取其值并相应地执行操作


如果在您的情况下,除了引用DOM之外真的没有其他方法来做这件事,那么您可以通过编写自定义指令来做。一般来说,Angular中的直接DOM操作应该是最后一种手段。

在google上发现了这一点,我最终解决了我的问题,下面是我的解决方案

如果您只需要ID,您可以将其作为参数传递

<select id="hairColorComponent" ng-model="hairColor"
        ng-options="option.name for option in hairColorData" 
        ng-change="updateUserData('hairColorComponent')">

(对于那些想知道的人,我正在尽最大努力转换遗留代码,“神奇地”保存网站上所有页面的用户设置。)

@Arunu我使用的是AngularJS,而不是jQuery。我只是编辑了这个问题,让它更清楚。这就是我害怕的。我试图获取DOM元素的ID来记录哪些数据被更改。那你会怎么做呢
$watch
每个数据项都是单独的吗?我不确定您的具体情况,但我发现如果您有ng模型,甚至不需要在元素上有id,因为您可以用它来做任何事情。您可以$watch,或者为每个select设置单独的ng更改方法。据我所知,两者都没有那么干涸,但将DOM和控制器分开会使维护/测试从长远来看变得更加容易。而不是以
角度
的方式。您正在从控制器修改UI,这就是指令的用途。
$scope.updateUserData = function (id) {
    var element = jQuery('#'+id);
};