69

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 を呼び出したオブジェクトへの参照を取得するにはどうすればよいですか? (属性を削除する必要があります)

4

2 に答える 2

223

技術的に言えば、次のことを行います。

<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 からのヒントに基づいて) レンダリングを行わせることであるため、これはおそらくやりたくないことです。コントローラーから DOM 要素と属性を操作することは、AngularJS の世界では絶対に禁止されています。

詳細については、この回答を確認してください: https://stackoverflow.com/a/12431211/1418796

于 2013-06-21T16:54:22.060 に答える
22

角度のある方法は角度ドキュメントに示されています:)

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>

基本的に角度のある方法は、入力を読み取り専用にするかどうかを保持するモデル オブジェクトを作成し、それに応じてそのモデル オブジェクトを設定することです。angular の美しさは、ほとんどの場合、dom 操作を行う必要がないことです。モデルが設定されているようにビューをAngularにレンダリングするだけです(Angularにdom操作を実行させ、コードをきれいに保ちます)。

したがって、基本的にあなたの場合、以下のようなことをするか、この実例をチェックしてください。

<button ng-click="isInput1ReadOnly = !isInput1ReadOnly">Click Me</button>
<input type="text" ng-readonly="isInput1ReadOnly" value="Angular Rules!"/>
于 2013-06-23T04:09:04.213 に答える