私は以下のコードを持っています。 JSONをループしてネストされたulリストを生成します。アンカータグにバインドされた関数toggleNav()を実行するclickイベントがあります。なぜクリックイベントが要素に2回バインドされているのかわかりません。また、私は角に新しいです、そこにこのコンセプトを説明する文書がありますか?ありがとう!Angular JS:クリックイベントが2回発生するのはなぜですか?
define([
'/assets/angularapp/AppDirectives.js',
'highstock'
], function (directives) {
directives.directive('collection', function() {
return {
restrict: "E", //declare by element
replace: true,
scope: {
collection: '='
},
template: "<ul class=\"nav nav-list tree\"><member ng-repeat=\"member in collection\" member=\"member\"></member></ul>"
}
})
directives.directive('member', function ($compile) {
return {
restrict: "E",
replace: true,
scope: {
member: '='
},
template: "<li ng-show=\"member.open\"><span><input type=\"checkbox\" ng-model=\"member.selected\" class=\"sideChkbox\"><a class=\"tree-toggle\" ng-click=\"toggleNav()\"><i class=\"icon-chevron-right\"></i>{{member.data}}</a></span></li>",
controller: function($scope, $element){
$scope.toggleNav = function(){
angular.forEach($scope.member.children,function(child,key){
if(child.open==true){
alert("a")
child.open=false;
} else {
child.open=true;
alert("b")
}
})
}
},
link: function (scope, element, attrs) {
if (angular.isArray(scope.member.children)) {
element.append("<collection collection='member.children'></collection>");
$compile(element.contents())(scope)
}
}
}
})
これを示すフィーリングを一緒に投げることができますか、私はハンドラへの2回の呼び出しを引き起こすはずの何も明らかではありません。しかし、ディレクティブを使用した後にDOMを検査できるようになると、いくつかの洞察が得られる可能性があります。実際にハンドラを複数回呼び出すことは、ハンドラ内でループの複数の繰り返しを取得するだけではないことも確かですか? – shaunhusain
foreachループが2つのアラートをトリガするとお考えですか?おそらくコレクションに2つの要素が含まれていても、その関数はまだ1回バインドされています。 – zsong
私は問題を調べるために魔法を作った、私はちょうどあなたが何を言っているのかを正直に見て、なぜそれが起こっているのか分かりません:http://jsfiddle.net/rEz52/1/ – shaunhusain