5

次のようなspanタグがあります。

<span ng-bind-html="item.Name | linky" ng-click="open(item)"></span>

ng-repeat 内。

item.Nameただし、電子メールまたはリンクが含まれている場合、リンキー フィルターが html を変更し、アンカー タグを挿入するという問題があります。リンクをクリックするとng-clickが起動し、アンカーが開きますが、アンカーを開いてng-clickが呼び出されないようにしたいだけです...これは可能ですか?

4

3 に答える 3

6

あなたのhtmlに次のようなものはどうですか:

<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);
    }        
}

もっと良い方法があるかもしれませんが、これでうまくいくと思います。このグループの記事で見たドキュメントにありますが。$event

于 2012-09-06T17:59:51.533 に答える
1

ディレクティブを使用するのはどうですか!

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");
                    }
                }
            }
        };
    })

そして、restrict: 'E' を使用すると、次のように呼び出すことができます

<p ng-repeat="item in items">
    <linky-dir item="item"></linky-dir>
</p>
于 2012-09-07T09:43:10.600 に答える
0

これがうまくいくかどうかはわかりませんが、試してみてください。

open 関数にパラメーターを追加し、this現在の dom 要素のポインターとして渡します。

<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 が返されます。

これはあなたが望むものではないかもしれませんが、それはあなたの目的に役立ちます:)

于 2012-09-06T09:12:06.930 に答える