[解決済み] angularjsでクリックされた要素にアクセスする
質問
AngularJSは比較的初心者で、コンセプトを把握できていないのではないかと思っています。また、Twitter Bootstrapを使用しており、jQueryも読み込んでいます。
作業の流れ ユーザーがリストのリンクをクリックすると、quot;master"セクションが更新され、ユーザーがクリックしたリンクがアクティブクラスを獲得する。
HTMLの基本的なマークアップ。
<ul class="list-holder" ng-controller="adminController">
<li><a ng-click="setMaster('client')">Clients</li>
<li><a ng-click="setMaster('employees')">Employees</li>
<li><a ng-click="setMaster('etc')>Etc...</li>
</ul>
jQueryで行う。
jQuery(".list-holder").on('click', 'a', function(event){
event.preventDefault();
jQuery(".list-holder li").removeClass('active');
jQuery(this).parent('li').addClass('active');
});
しかし、AngularとjQueryを統合してこれを実現する方法がわかりません。Angularを使って、マスターリスト(JSON形式)をサーバーから取得し、ページ上のリストを更新しているからです。
どのように統合すればよいのでしょうか?アンギュラーコントローラの関数内に入ると、クリックした要素が見つからないようです。
コントローラーです。
function adminController($scope)
{
$scope.setMaster = function(obj)
{
// How do I get clicked element's parent li?
console.log(obj);
}
}
解決方法は?
AngularJSでは、以下の構文でクリックイベントを把握することができます(つまり、そのターゲットになることができます)。
$event
引数に
setMaster
関数のドキュメントはこちらです。
http://docs.angularjs.org/api/ng.directive:ngClick
):
function AdminController($scope) {
$scope.setMaster = function(obj, $event){
console.log($event.target);
}
}
というのは、この問題を解決する方法としては、あまりアンギュラー的ではありません。AngularJSでは、モデル操作に焦点が当てられています。モデルを変更し、レンダリングはAngularJSに任せます。
この問題を解決するためのAngularJSの方法(jQueryと
を渡す必要がない。
$event
引数
)となる。
<div ng-controller="AdminController">
<ul class="list-holder">
<li ng-repeat="section in sections" ng-class="{active : isSelected(section)}">
<a ng-click="setMaster(section)">{{section.name}}</a>
</li>
</ul>
<hr>
{{selected | json}}
</div>
で、コントローラ内のメソッドはこのようになります。
$scope.setMaster = function(section) {
$scope.selected = section;
}
$scope.isSelected = function(section) {
return $scope.selected === section;
}
以下は、jsFiddleの完成形です。 http://jsfiddle.net/pkozlowski_opensource/WXJ3p/15/
関連
-
[解決済み】ある要素を別の要素に移動させるには?
-
[解決済み] 要素外でのクリックを検出するにはどうすればよいですか?
-
Uncaught SyntaxError: 予期しない入力の終了
-
[解決済み] jquery 3.0 url.indexOfエラー
-
[解決済み] jQueryで要素が非表示になっているかどうかを確認するには?
-
[解決済み] jQueryで要素にスクロールする
-
[解決済み] jQueryで複数のクラスを持つ要素を選択するにはどうすればよいですか?
-
[解決済み] AngularJSでデータバインディングはどのように機能するのですか?
-
[解決済み] AngularJSを使用して、ブラウザのコンソールで$scope変数にアクセスするにはどうすればよいですか?
-
[解決済み] CSSを使用してSVG画像の色を変更する方法(jQuery SVG image replacement)とは?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] クラスメソッド内の "this "をタイプスクリプトで記述する
-
[解決済み] Microsoft JSONの日付はどのようにフォーマットするのですか?
-
[解決済み] 選択オプション「selected」を値で設定する
-
[解決済み] 動的に生成された要素でクリックイベントが動作しない [duplicate]
-
[解決済み] CSSを使用してSVG画像の色を変更する方法(jQuery SVG image replacement)とは?
-
[解決済み] jQueryを使ってロールオーバー時に画像ソースを変更する
-
[解決済み] jQueryを使用してspanに値を設定する方法
-
[解決済み] jQueryでval()がchange()をトリガーしない
-
[解決済み] jQuery OR Selector?
-
[解決済み] Jqueryのコードはヘッダーとフッターのどちらに入れるべきですか?