2012-09-03 11 views
5

मैं एक span टैग है कि इस तरह दिखता है।AngularJS Linky फिल्टर stoppropagation

मुझे कोई समस्या है, हालांकि item.Name में एक ईमेल या लिंक लिंक फ़िल्टर एचटीएमएल को बदलता है और एंकर टैग डालता है। अब जब मैं लिंक एनजी क्लिक आग और लंगर खोलता क्लिक करें, लेकिन मैं केवल लंगर खोल सकते हैं और रोकने के लिए एनजी-क्लिक करें बुलाया जा रहा से ... संभव है?

+0

हाय फोन करता हूँ! क्या आप जानते हैं कि इन क्लिक कॉलबैक को किस क्रम में कहा जाता है? अवधि से पहले एंकर? –

उत्तर

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

एक बेहतर तरीका हो सकता है, लेकिन मेरा मानना ​​है कि यह काम करेगा। हालांकि यह documentation में है मैं this group article में $event देखा।

+0

समझने के लिए सबसे आसान कोड है। जीत। – Greg

+0

ऐसा करने के लिए धन्यवाद! – yoleg

0

मैं अगर यह काम करेगा, लेकिन इसे आजमाइए पता नहीं है।

अपने खुले समारोह में एक पैरामीटर जोड़ें और this वर्तमान डोम तत्व के सूचक के रूप में गुजरती हैं।

<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 
    . 
    . 
    . 

    } 

तो विधि बुलाया जाएगा लेकिन अवास्तविक लौटाते हैं अगर यह लंगर टैग है।

यह आप क्या चाहते हैं नहीं हो सकता है, लेकिन यह अपने उद्देश्य :)

+0

काम नहीं लग रहा है। 'यह' हमेशा स्पैन होता है, इसलिए कभी भी एक href विशेषता – Greg

+0

नहीं होगी, लेकिन आपने कहा कि लिंकी एचटीएमएल को बदलता है और एंकर टैग –

+0

रखता है हां एंकर टैग अवधि के अंदर है। इस तरह एनजी-बाइंड-एचटीएमएल काम करता है। यह मूल्य को अवधि के अंदर रखता है, और एचटीएमएल को एंकर को शामिल करने के लिए एचटीएमएल को जोड़ता है। अंतिम एचटीएमएल ' 'जैसा दिखता है, इसलिए स्पैन पर' यह 'डालने से कभी भी जावास्क्रिप्ट में एंकर से गुजरना नहीं होगा। – Greg

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

और अंकुश लगाते हैं: 'ई', आप इसे इस तरह

<p ng-repeat="item in items"> 
    <linky-dir item="item"></linky-dir> 
</p>