私はspan
このようになりますタグを持っています。AngularJS LinkyはフィルタのstopPropagation
item.Name
に電子メールまたはリンクが含まれていると、リンカーフィルタがhtmlを変更してアンカータグを挿入しても問題はあります。今すぐリンクをクリックするとng-clickが起動し、アンカーが開きますが、アンカーが開き、ng-clickが呼び出されないようにするだけです...これは可能ですか?
私はspan
このようになりますタグを持っています。AngularJS LinkyはフィルタのstopPropagation
item.Name
に電子メールまたはリンクが含まれていると、リンカーフィルタがhtmlを変更してアンカータグを挿入しても問題はあります。今すぐリンクをクリックするとng-clickが起動し、アンカーが開きますが、アンカーが開き、ng-clickが呼び出されないようにするだけです...これは可能ですか?
方法:あなたの関数呼び出しのための
<span ng-bind-html="item.Name | linky" ng-click="open(item, $event)"></span>
そして、この:
$scope.open = function(item, event){
if(event.srcElement.tagName !== 'A'){
alert('do something here with ' + item.Name);
}
}
もっと良い方法があるかもしれませんが、これはうまくいくと思います。 documentationにありますが、がthis group articleにあります。
これがうまくいくかどうかわかりませんが、試してみてください。
オープン関数にパラメータを追加し、現在のdom要素のポインタとしてthis
を渡します。開いている機能 EDITED CODEで今
<span ng-bind-html="item.Name | linky" ng-click="open(item,this)"></span>
:
function open(item,this)
{
// will be true if linky had changed the HTML and added anchor tag
var children = this.childNodes;
for(a in children)
{
if(children[a].href)
{
return false;
}
}
//your existing code
.
.
.
}
ので、メソッドが呼び出されますが、それはアンカータグである場合はfalseを返します。
これは、あなたが望むものではないかもしれませんが、それはあなたの目的を果たすだろう:)
あなたのhtmlのためにこのようなものについてディレクティブの使用はどうですか?
app = angular.module("myModule", ["ngSanitize"])
.directive('linkyDir', function() {
return {
restrict: 'E',
replace: true,
scope: { item: '=' },
template: '<span ng-bind-html="item.Name | linky", ng-click="open(item)"></span>',
controller: function($scope, $element) {
$scope.open = function(item) {
if ($element[0].firstChild.tagName !== "A") {
console.log("Not an anchor");
}
else {
console.log("Is an anchor tag");
}
}
}
};
})
そして、制限付き: 'E'、あなたはこの
<p ng-repeat="item in items">
<linky-dir item="item"></linky-dir>
</p>
こんにちはようにそれを呼ぶことにします!これらのクリックコールバックがどの順番で呼び出されているかを知っていますか?アンカー前にスパン? –