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


67

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

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

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


5
你想达到什么目的?为什么需要删除属性?AngularJS的全部要点是您不必进行DOM操作。
test123 2013年

每个按钮在不同输入上切换只读属性
jviotti 2013年

Answers:


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>

基本上,角度方式是创建一个模型对象,该模型对象将保存输入是否为只读,然后相应地设置该模型对象。角度的优点在于,大多数时候您不需要进行任何dom操作。您只需按照设置模型的方式对视图进行角度渲染(让角度为您进行dom操作并保持代码干净)。

因此,基本上,在您的情况下,您将想要执行以下操作或查看工作示例。

<button ng-click="isInput1ReadOnly = !isInput1ReadOnly">Click Me</button>
<input type="text" ng-readonly="isInput1ReadOnly" value="Angular Rules!"/>

1
为什么要投反对票?如果有什么不对劲,我很想学习它是什么。
test123 2014年

21
我了解要使用其他方法。我不赞成完全有效的不赞成投票,恕我直言是一种更好的方法。
123年

1
+1指出更好的方法。我是angular的新手,使用您的方法需要一些时间才能完成工作。不幸的是我要到我迁移我的代码以使用对方的回答..
tftd

1
赞成采用其他方法。但是仍然有一种方法可以找出单击了哪个元素按钮。
ismail baig

8
这对SO很有帮助,但是它不能回答这个问题,因此即使它是解决SO问题的解决方案,也不应被接受。我来这里是出于完全正当的理由寻找同一问题的答案,但您的答案并没有帮助您,因为它可以解决问题而不是问题。为了读者的利益,请回答所提出的问题。如果您觉得有更好的解决方案,请在评论部分中提供有关该解决方案的建议,然后继续与SO进行讨论。
WebWanderer

221

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

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

这可能是您希望做的事情,因为AngularJS的理念是专注于模型操作,然后让AngularJS进行渲染(基于声明性UI的提示)。在AngularJS世界中,从控制器操作DOM元素和属性是一件大事。

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


我应该如何以Angular的方式完成此任务?每个按钮在不同的输入中切换只读属性
jviotti 2013年

@jviotti不可能在没有实时代码示例的情况下为您提供准确的帮助。我猜答案是在使用ng-readonly指令。但是我建议在plnkr.co中
pkozlowski.opensource

2
我猜$ event.currentTarget给出了当前的dom元素
Sambhav Sharma 2014年

1
关于您对控制器中没有DOM进行操作的评论,在指令的控制器中完全可以接受。
Sean256

7
“在AngularJS世界中,从控制器操作DOM元素和属性是一个很大的禁忌。” 当然,除了需要的时候...
iGanja
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.