2013-10-28 11 views
6

के लिए सरल कोणीय निर्देश किसी के पास बूटस्ट्रैप मोडल स्वचालित रूप से दिखाने के लिए एक सरल निर्देश है? बूटस्ट्रैप 3 में उन्होंने मोडल को स्वचालित रूप से दिखाने की क्षमता को हटा दिया ताकि मैं एक कोणीय एनजी-शो शो ब्लॉक का उपयोग न कर सकूं। कोई भी मदद बहुत अच्छी रहेगी।बूटस्ट्रैप मॉडल

उत्तर

18

कोणीय 1.2 & बूटस्ट्रैप 3.1.1 के लिए अपडेट किया गया: http://embed.plnkr.co/WJBp7A6M3RB1MLERDXSS/

मैं Ender2050 के जवाब बढ़ाया तो निर्देश एक अलग गुंजाइश नहीं है। इसका मतलब है कि मोडल सामग्री में स्कोप ऑब्जेक्ट्स के संदर्भ हो सकते हैं। निर्देश विशेषता का भी पुन: उपयोग करें ताकि केवल एक विशेषता की आवश्यकता हो।

app.directive("modalShow", function ($parse) { 
    return { 
     restrict: "A", 
     link: function (scope, element, attrs) { 

      //Hide or show the modal 
      scope.showModal = function (visible, elem) { 
       if (!elem) 
        elem = element; 

       if (visible) 
        $(elem).modal("show");      
       else 
        $(elem).modal("hide"); 
      } 

      //Watch for changes to the modal-visible attribute 
      scope.$watch(attrs.modalShow, function (newValue, oldValue) { 
       scope.showModal(newValue, attrs.$$element); 
      }); 

      //Update the visible value when the dialog is closed through UI actions (Ok, cancel, etc.) 
      $(element).bind("hide.bs.modal", function() { 
       $parse(attrs.modalShow).assign(scope, false); 
       if (!scope.$$phase && !scope.$root.$$phase) 
        scope.$apply(); 
      }); 
     } 

    }; 
}); 

उपयोग:

<div modal-show="showDialog" class="modal fade"> ...bootstrap modal... </div> 
+0

यह एक आकर्षण की तरह काम करता है, सिवाय इसके कि मोडल मेरे बूटस्ट्रैप navbar के पीछे गायब हो गया (डोम पेड़ में मोडल के स्थान के कारण)। मैंने इसे $ (elem) बदलकर हल किया। मॉडल ("शो") $ (elem) .appendTo ('body')। Modal ("show")। –

13

यहां एक कोणीय निर्देश है जो बूटस्ट्रैप मोडल को छुपाएगा और दिखाएगा।

app.directive("modalShow", function() { 
    return { 
     restrict: "A", 
     scope: { 
      modalVisible: "=" 
     }, 
     link: function (scope, element, attrs) { 

      //Hide or show the modal 
      scope.showModal = function (visible) { 
       if (visible) 
       { 
        element.modal("show"); 
       } 
       else 
       { 
        element.modal("hide"); 
       } 
      } 

      //Check to see if the modal-visible attribute exists 
      if (!attrs.modalVisible) 
      { 

       //The attribute isn't defined, show the modal by default 
       scope.showModal(true); 

      } 
      else 
      { 

       //Watch for changes to the modal-visible attribute 
       scope.$watch("modalVisible", function (newValue, oldValue) { 
        scope.showModal(newValue); 
       }); 

       //Update the visible value when the dialog is closed through UI actions (Ok, cancel, etc.) 
       element.bind("hide.bs.modal", function() { 
        scope.modalVisible = false; 
        if (!scope.$$phase && !scope.$root.$$phase) 
         scope.$apply(); 
       }); 

      } 

     } 
    }; 

}); 

प्रयोग उदाहरण # 1 - इस मानता है कि आपके मोडल दिखाना चाहते हैं - आप जोड़ सकते एनजी-अगर एक शर्त के रूप

<div modal-show class="modal fade"> ...bootstrap modal... </div> 

प्रयोग उदाहरण # 2 - यह एक कोणीय अभिव्यक्ति मोडल में उपयोग करता है -visible विशेषता

<div modal-show modal-visible="showDialog" class="modal fade"> ...bootstrap modal... </div> 

एक और उदाहरण - नियंत्रक बातचीत डेमो के लिए, आप अपने नियंत्रक को कुछ इस तरह जोड़ सकता है और यह 2 सेकंड के बाद मॉडल दिखाने के लिए और फिर 5 secon के बाद छिपा दिया जाएगा डी एस।

$scope.showDialog = false; 
$timeout(function() { $scope.showDialog = true; }, 2000) 
$timeout(function() { $scope.showDialog = false; }, 5000) 

मुझे यह देखने में उत्सुकता है कि लोग किस समाधान के साथ आते हैं। चीयर्स!

+1

बस इस में खामियों को दूर और यह बहुत अच्छा काम करता है। तेज प्रतिक्रिया के लिए धन्यवाद और बूटस्ट्रैप 4 के लिंक के लिए धन्यवाद :) – Lereveme

+0

"लेकिन अभी एक बड़ी लाइब्रेरी शामिल नहीं करना चाहते हैं" - इसलिए मैंने jQuery और बूटस्ट्रैप की जावास्क्रिप्ट को शामिल करने का निर्णय लिया है ... ehhh ... –

+2

काम करता है लेकिन फिर यह पॉपओवर को खारिज करने के बाद नियंत्रक के दायरे में शोडियलॉग को चालू नहीं करेगा और इसके बाद विशेषता को फिर से झूठ के रूप में दिखाई देगा। केवल यह डोम से गायब हो जाता है लेकिन यह परिवर्तन मॉडल में दिखाई नहीं देता है। मुझे क्या करना चाहिए? –

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