2012-09-12 16 views
24

जब उपयोगकर्ता किसी लिंक पर क्लिक करता है, तो मैं नियंत्रक के अंदर किसी फ़ंक्शन में कुछ कोड निष्पादित करना चाहता हूं। लेकिन मैं इसे रोकना चाहता हूं कि यूआरएल बदलता है।डिफ़ॉल्ट एंकर व्यवहार को रोकें AngularJS

मैं निम्नलिखित संभावनाओं

  1. href-विशेषता निकाला गया की कोशिश की। काम नहीं किया, अभी भी '/' को

  2. मेरी deleteUser में ng-click='deleteUser(user.id, $event)' और $event.preventDefault() की कोशिश की() यूआरएल में परिवर्तन - कार्य करते हैं। काम नहीं किया।

  3. गिटहब पर एक हैक मैंने unintended reload के बारे में क्या किया है।

    <a ng-click="deleteUser(user.id)" href="javascript:">Delete user</a> 
    

    प्रश्न

    URL में बदलाव करने से एक लिंक को रोकने के लिए the'clean 'विधि क्या है:

यह मैं इसे कैसे अब क्या है?

+0

का समाधान क्यों है href = "#" का उपयोग क्यों नहीं करें? –

+8

या बस '' 'href =" "' ''? – opyate

+0

+1 को ऑप्टेट करने के लिए, 'href = ""' मेरी समस्या ठीक हुई। 'href =" # "' '/' पर फिर से रूट हो गया है, इसलिए इसे क्लिक पर रीडायरेक्ट किया गया। –

उत्तर

3

वास्तविक समस्या a directive

यह सही है में है, हर <a></a> तत्व वास्तव में एक AngularJS निर्देश है।

यदि आप कोड में टिप्पणियां देखते हैं तो यह आईई के साथ कुछ मुद्दों को ठीक करने लगता है।

लेकिन मेरे लिए सबकुछ बढ़िया काम कर रहा है जब मैंने केवल AngularJS कोर कोड से निर्देश हटा दिया।

मुझे वही समस्या हो रही थी जैसा आपने किया था और अन्य सभी समाधानों का प्रयास किया था। अंतर यह है कि मुझे केवल आईई में समस्या थी।

यदि आप स्रोत से AngularJS स्क्रिप्ट बनाने के साथ नहीं खेलना चाहते हैं, तो angular.js फ़ाइल में htmlAnchorDirective की खोज करें और इसे हटाएं/टिप्पणी करें।

मेरा मानना ​​है कि यहां एक बड़ी समस्या है जिसे AngularJS कोर में संबोधित किया जाना चाहिए, लेकिन मुझे अभी तक यह नहीं मिला है।

अद्यतन: यह समाधान अब शायद पुराना है! आपको नवीनतम AngularJS संस्करण का उपयोग करने का प्रयास करना चाहिए।

1

मैं हमेशा deleteUser ($ event, user.id) कर रहा हूं और यह काम करना प्रतीत होता है। एक संभावित समस्या आपके क्लिक हैंडलर के चर का क्रम होगा। पहला तर्क शायद $ इवेंट ऑब्जेक्ट होना चाहिए।

+0

मुझे खेद है, यह मेरे लिए काम नहीं कर रहा है। मैंने इसे पहले चर के रूप में '$ event' के साथ आजमाया, लेकिन काम नहीं करता है। आपके जवाब के लिए Thx! – Voles

0

यह बेशक एक हैक है, लेकिन मैंने किया था:

<span class="link" ng-click="deleteUser(user.id)">Delete user</span> 

और मेरी सीएसएस में

span.link { 
    /* style like a link */ 
} 
+0

मैंने अपने लिंक (जेड के साथ, नोड.जेएस के साथ) को एक वर्ग भी सौंपा लेकिन चाल नहीं की। आपके जवाब के लिए धन्यवाद! – Voles

+0

कृपया हमें बताएं कि काम खत्म हो गया - धन्यवाद! –

+0

मैं अभी भी 'href = "जावास्क्रिप्ट का उपयोग करता हूं:" 'इस समय हॅक करें ... – Voles

3

जब आप href विशेषता हटाया वास्तव में क्या काम नहीं किया था? यह वही है जो आपको करना चाहिए। एक उदाहरण के लिए इस बेला देखें: http://jsfiddle.net/terebentina/SXcQN/

+0

ng-href का एक खाली href मेरे लिए चाल नहीं करता है। आपके जवाब का धन्यवाद! – Voles

+0

हो सकता है कि आप एक सरलीकृत jsfiddle और/या ब्राउज़र विवरण प्रदान कर सकें ... या यह सभी ब्राउज़रों में होता है? –

16
<a ng-click="deleteUser(user.id)" href="">Delete user</a> 
+0

जैसा कि मैंने दान कैरेज के जवाब के लिए कहा था, एक खाली href मेरे लिए चाल नहीं करता है – Voles

+4

मुझे विश्वास नहीं है कि यह व्यवहार ब्राउज़र या मामलों के बीच असंगत है। क्या आप अपना काम नहीं कर रहे लाइव उदाहरण प्रदान कर सकते हैं, संभवतः http://jsfiddle.net –

+0

पर यह मेरी समस्या थी। बाएं href = "" और सभी उम्मीद के अनुसार काम किया। मुझे नहीं पता क्यों, लेकिन मुझे लगता है कि मैं एनजी-क्लिक से बाहर जादू की उम्मीद कर रहा था। – fool4jesus

1

मैं इसे पूरा करने के लिए अपने कस्टम निर्देश का उपयोग करता हूं। इसकी तंत्र एनजी-क्लिक निर्देश स्वयं संचालित करने के लिए है।

angular.module('delete', []) 
.directive('buttonDelete', ['$parse', function ($parse) { 
    var confirmFunc = function (scope, element, attr, event, ngClick) { 
     if (! confirm("Are you sure?")) { 
      event.preventDefault(); 
     } 
     else { 
      // Copy from ngEventDirectives initialization. 
      var fn = $parse(ngClick); 
      scope.$apply(function() { 
       fn(scope, {$event:event}); 
      }); 
     } 
    }; 

    return { 
     restrict: 'C', 
     compile: function (element, attr) { 
      var ngClick = attr.ngClick; 
      attr.ngClick = ''; 

      return { 
       pre: function (scope, element, attr) { 
        element.click(function (e) { 
         confirmFunc(scope, element, attr, e, ngClick); 
        }); 
       } 
      }; 
     } 
    }; 
}]); 
0

निम्नलिखित मेरे लिए महान काम किया:

<a ng-href="javascript: return false;" ng-click="alertSearchCtrl.deleteAlert()">Remove</a> 
5

आप a तत्व निर्देश के लिए source code (जो कोणीय कोर का एक हिस्सा है) को देखें, तो यह लाइन पर कहा गया है 29 - 31 :

if (!element.attr(href)) { 
    event.preventDefault(); 
} 

जिसका अर्थ है कि कोणीय पहले से ही href के बिना लिंक के मुद्दे को हल कर रहा है। आपके पास अभी भी एकमात्र समस्या सीएसएस समस्या है। तुम अब भी लंगर है एनजी-क्लिक, उदा .:

a[ng-click] { 
    /* Styles for anchors without href but WITH ng-click */ 
    cursor: pointer; 
} 

सूचक शैली लागू कर सकते हैं तो, आप भी तो एक सूक्ष्म, अलग स्टाइल के साथ वास्तविक लिंक लिंक है कि कार्य करने चिह्नित करके अपनी साइट को और अधिक सुलभ बना सकता है।

मुबारक कोडिंग!

2

रूप @Justus ने बताया यदि स्रोत कोड की तरह है:

if (!element.attr(href)) { 
    event.preventDefault(); 
} 

अशक्त स्ट्रिंग के रूप में element.attr(href) बनाना'' रूप !''true को मूल्यांकन करता है, if हालत के अंदर आप मिलना चाहिए। यह @umur

संबंधित मुद्दे