1. ホーム
  2. javascript

AngularJSのディレクティブでstopPropagationを行うにはどうしたらいいですか?

2023-08-12 10:50:26

質問

Twitter Bootstrapのナビバーのドロップダウンで、li内の要素(リンク)がクリックされたときに閉じないようにするために、"stopPropagation"をしようとしています。 このメソッドを使用することは、一般的なようです ソリューション .

Angularでは、ディレクティブがこれを行う場所であるように思えますか? だから私は持っています。

// do not close dropdown on click
directives.directive('stopPropagation', function () {
    return {
        link:function (elm) {            
            $(elm).click(function (event) {                
                event.stopPropagation();
            });
        }
    };
});

... しかし、このメソッドは要素に属していません。

TypeError: Object [object Object] has no method 'stopPropagation'

でディレクティブを結びつけています。

<li ng-repeat="foo in bar">
  <div>
    {{foo.text}}<a stop-propagation ng-click="doThing($index)">clickme</a>
  </div>
</li>

何か提案はありますか?

どのように解決するのですか?

現在、いくつかのディレクティブ (例: ng:click) は、イベントの伝播を停止します。これは、そのようなイベントの捕捉に依存する他のフレームワークとの相互運用性を妨げます。 - リンク

... ディレクティブなしで、単に行うだけで修正することができました。

<a ng-click="doThing($index); $event.stopPropagation();">x</a>