使用ng-click传递对DOM对象的引用

jvi*_*tti 65 angularjs angularjs-ng-click

我有多个元素在ng-click上具有相同的回调:

<button ng-click="doSomething()"></button>
<button ng-click="doSomething()"></button>
<button ng-click="doSomething()"></button>
<button ng-click="doSomething()"></button>
Run Code Online (Sandbox Code Playgroud)
// In controller:
$scope.doSomething = function() {
  // How do I get a reference to the button that triggered the function?
};
Run Code Online (Sandbox Code Playgroud)

如何获得对doSomething调用的对象的引用?(我需要删除它的attr)

pko*_*rce 215

从技术上讲,当您执行以下操作时:

<button ng-click="doSomething($event)"></button>
Run Code Online (Sandbox Code Playgroud)
// In controller:
$scope.doSomething = function($event) {
  //reference to the button that triggered the function:
  $event.target
};
Run Code Online (Sandbox Code Playgroud)

这可能是你的东西希望做的AngularJS理念是专注于模型的操作,让AngularJS做渲染(根据提示从声明UI).在AngularJS世界中,从控制器处理DOM元素和属性是一个很大的禁忌.

您可以查看此答案以获取更多信息:https://stackoverflow.com/a/12431211/1418796

  • "在AngularJS世界中,从控制器处理DOM元素和属性是一个很大的禁忌." 除非你必须,当然...... (7认同)
  • 我想$ event.currentTarget给出了当前的dom元素 (2认同)

tes*_*123 21

角度方式显示在角度文档:)

https://docs.angularjs.org/api/ng/directive/ngReadonly

以下是他们使用的示例:

<body>
    Check me to make text readonly: <input type="checkbox" ng-model="checked"><br/>
    <input type="text" ng-readonly="checked" value="I'm Angular"/>
</body>
Run Code Online (Sandbox Code Playgroud)

基本上,角度方式是创建一个模型对象,该对象将保持输入是否应该只读,然后相应地设置该模型对象.棱角分明的美是大多数时候你不需要做任何dom操作.你只需要角度渲染你的模型设置的视图(让角度为你做dom操作并保持你的代码干净).

所以基本上在你的情况下你会想要做下面的事情或查看这个工作示例.

<button ng-click="isInput1ReadOnly = !isInput1ReadOnly">Click Me</button>
<input type="text" ng-readonly="isInput1ReadOnly" value="Angular Rules!"/>
Run Code Online (Sandbox Code Playgroud)

  • 我理解想要使用不同的方法.我不明白对一个完全有效的恕我直言投票是一个更好的方法. (21认同)
  • 这有助于SO,但它没有回答这个问题,因此不应该是公认的答案,即使它是SO问题的解决方案.我来到这里寻找同一个问题的答案是出于完全正当的理由,并且没有得到你答案的帮助,因为它解决了问题,而不是问题.为了读者,请回答问题.如果您觉得有更好的解决方案,请在评论部分提供该解决方案的建议,并在聊天中继续与SO讨论. (8认同)
  • 为什么投反对票?如果有什么不对的地方,我很想知道它是什么。 (2认同)