2016-02-11 5 views
7

मेरे पास md-tooltip के अंदर एक मूल md-button है। हालांकि, यदि उपयोगकर्ता मोबाइल डिवाइस पर है तो मुझे अपनी वेबसाइट से सभी टूलटिप्स को वैश्विक रूप से हटाने का एक तरीका चाहिए।कोणीय सामग्री के साथ 'md-tooltip` गतिशील रूप से कैसे निकालें?

<md-button class="md-primary md-raised"> 
    Hello 
    <md-tooltip>This is a buttons tooltip</md-tooltip> 
</md-button> 

बाद टेम्पलेट भरी हुई है और निर्देशों चलने के बाद, इसके बाद के संस्करण में परिवर्तित हो जाती है:

<button class="md-primary md-raised md-button md-ink-ripple" type="button" ng-transclude="" aria-label="Hello"> 
    <span class="ng-scope"> 
     Hello 
    </span> 
    <div class="md-ripple-container"></div> 
</button> 

वहाँ बटन तत्व नहीं रह गया है md-tooltip होता है, अन्यथा मैं बस सिर्फ टूलटिप को दूर करता हूँ तत्व।

ऐसा करने का कारण मोबाइल पर है, md-tooltip बटन क्लिक करता है। इसलिए पहले क्लिक पर टूलटिप प्रदर्शित होता है और बटन दूसरे क्लिक पर कार्रवाई पर क्लिक करते हैं। यह निश्चित रूप से एक वांछनीय प्रभाव नहीं है।

मैं अपने पृष्ठ पर सभी तत्वों से सभी टूलटिप्स कैसे हटा सकता हूं ताकि मेरे बटन क्लिक करें दूसरी बार के बजाय पहला क्लिक/टैप हो?

उत्तर

5

ठीक है, तो मैं सफलतापूर्वक मेरी सुझाव पहले क्रियान्वित किया है, यहाँ DEMO

मैं सिर्फ इसके बारे में कोणीय सामग्री के संस्करण ओवरराइड करने के लिए md-tooltip का एक और संस्करण बनाया है। फिर मैंने angular.decorator बनाया ताकि यह चुनने के लिए कि md-tooltip का कौन सा निर्देश संस्करण कोणीय उपयोग करेगा।

app.directive('mdTooltip', function(){ //create your overriding directive 
    return{ 
    replace: true, 
    template: '<span style="display:none"></span>', 
    scope: {}, //create an isolated scope 
    link: function(scope, element){ 
     element.remove(); 
     scope.$destroy(); 
    } 
    }; 
}); 

app.decorator('mdTooltipDirective',function($delegate){ 

    var version = 0; 
    var onMobile = false;//do your checking here 

    if(onMobile) //here comes the switching 
    version = 1; 

    return [$delegate[version]]; 

}); 

mdTooltipDirective में Directive शब्द कोणीय करने के लिए कहने के लिए है कि हम एक सेवा निर्देशक के लिए नहीं यह चयन करना चाहते हैं महत्वपूर्ण है,।

संपादित करें: मैं एक लिंक समारोह जोड़ा गया है और तत्व यह है कि अधिभावी निर्देश


मैं नहीं दिख रहा है ऐसा करने के तरीके पर उनके डॉक्स पर किसी भी उल्लेख द्वारा रखा गया है हटा दिया।

दो तरीकों से मैं इस बारे में सोचने के बारे में सोच सकता हूं।

  1. अपने एक मोबाइल डिवाइस पर यदि display: none सभी <md-tooltip>
  2. mdTooltip निर्देश तो सशर्त $compile मूल MD-टूलटिप या एक खाली एक (यदि आप एक मोबाइल पर हैं)
+0

दुर्भाग्य से, पहला समाधान काम नहीं करेगा। मोबाइल पर, 'एमडी-टूलटिप' बटन बटन पर क्लिक कर रहा है। इसलिए, बटन पर कार्रवाई करने के लिए मोबाइल पर एक डबल टैप की आवश्यकता होती है। मेरा मानना ​​है कि आपका सेक्शन विकल्प शॉट के लायक हो सकता है। एक उदाहरण का कोई मौका? – Fizzix

+0

@ फ़िजिक्स मैंने अपना प्रश्न संपादित किया और मेरा सुझाव संख्या 2 –

+0

परफेक्टेट लागू किया। अब मोबाइल पर क्लिक नहीं लेता है। बहुत अच्छा काम करता है, अच्छा काम! – Fizzix

0

ब्लॉग

https://github.com/angular/material/issues/4176

अनुसार ओवरराइड एमडी-टूलटिप बग कोड है।

तो मैं आपको शर्त के आधार पर टूलटिप कोड चलाने के लिए सुझाव दूंगा। अगर मोबाइल डिवाइस पर ब्राउज़र तो टूलटिप

जोड़ने के लिए कोड नहीं चला आप उपयोग कर सकते हैं जैसा:

http://ngmodules.org/modules/ng-device-detector

लिए AngularJS में मोबाइल ब्राउज़र का पता लगाने।

+0

लेकिन अगर मेरी साइट के भीतर 100 से अधिक 'एमडी-टूलटिप्स' हैं तो क्या होगा ? मुझे मैन्युअल रूप से प्रत्येक पर जाना होगा और एक शर्त जोड़नी होगी ... उम्र लेना होगा। – Fizzix

+0

फिर आपको स्थिति में 'एमडी-टूलटिप्स' प्रारंभ करने की आवश्यकता है – Mitul

0
HTML 

<md-tooltip md-direction="bottom" class="tooltip">Tooltip Bottom</md-tooltip> 

CSS 

@media(max-width:599px) { 
md-tooltip.tooltip { 
     display: none !important; 
    } 
} 
संबंधित मुद्दे