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

时间:2013-06-21 16:49:25

标签: 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>
// In controller:
$scope.doSomething = function() {
  // How do I get a reference to the button that triggered the function?
};

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

2 个答案:

答案 0 :(得分:211)

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

<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

答案 1 :(得分: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操作并保持你的代码干净)。

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

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