2012-11-16 22 views
8

मैं के लिए ट्विटर बूटस्ट्रैप मोडल एक निर्देश AngularJS निर्देश बनाने की कोशिश कर रहा हूँ।AngularJS मोडल विंडो निर्देश

var demoApp = angular.module('demoApp', []); 

demoApp.controller('DialogDemoCtrl', function AutocompleteDemoCtrl($scope) { 
    $scope.Langs = [ 
     {Id:"1", Name:"ActionScript"}, 
     {Id:"2", Name:"AppleScript"}, 
     {Id:"3", Name:"Asp"}, 
     {Id:"4", Name:"BASIC"}, 
     {Id:"5", Name:"C"}, 
     {Id:"6", Name:"C++"} 
    ]; 

    $scope.confirm = function (id) { 
     console.log(id); 
     var item = $scope.Langs.filter(function (item) { return item.Id == id })[0]; 
     var index = $scope.Langs.indexOf(item); 
     $scope.Langs.splice(index, 1); 
    }; 
}); 

demoApp.directive('modal', function ($compile, $timeout) { 
    var modalTemplate = angular.element("<div id='{{modalId}}' class='modal' style='display:none' tabindex='-1' role='dialog' aria-labelledby='myModalLabel' aria-hidden='true'><div class='modal-header'><h3 id='myModalLabel'>{{modalHeaderText}}</h3></div><div class='modal-body'><p>{{modalBodyText}}</p></div><div class='modal-footer'><a class='{{cancelButtonClass}}' data-dismiss='modal' aria-hidden='true'>{{cancelButtonText}}</a><a ng-click='handler()' class='{{confirmButtonClas}}'>{{confirmButtonText}}</a></div></div>"); 
    var linkTemplate = "<a href='#{{modalId}}' id= role='button' data-toggle='modal' class='btn small_link_button'>{{linkTitle}}</a>" 

    var linker = function (scope, element, attrs) { 
     scope.confirmButtonText = attrs.confirmButtonText; 
     scope.cancelButtonText = attrs.cancelButtonText; 
     scope.modalHeaderText = attrs.modalHeaderText; 
     scope.modalBodyText = attrs.modalBodyText; 
     scope.confirmButtonClass = attrs.confirmButtonClass; 
     scope.cancelButtonClass = attrs.cancelButtonClass; 
     scope.modalId = attrs.modalId; 
     scope.linkTitle = attrs.linkTitle; 

     $compile(element.contents())(scope); 
     var newTemplate = $compile(modalTemplate)(scope); 

     $(newTemplate).appendTo('body'); 

     $("#" + scope.modalId).modal({ 
      backdrop: false, 
      show: false 
     }); 
    } 

    var controller = function ($scope) { 
     $scope.handler = function() { 
      $timeout(function() { 
       $("#"+ $scope.modalId).modal('hide');   
       $scope.confirm();    
      }); 
     } 
    } 

    return { 
     restrict: "E", 
     rep1ace: true, 
     link: linker, 
     controller: controller, 
     template: linkTemplate 
     scope: { 
      confirm: '&' 
     } 
    }; 
});​ 

यहाँ JsFiddle उदाहरण है http://jsfiddle.net/okolobaxa/unyh4/15/

लेकिन हैंडलर() फ़ंक्शन पृष्ठ पर निर्देशों के रूप में रूप में कई बार चलाता है। क्यूं कर? सही तरीका क्या है?

उत्तर

7

उस AngularJS v1.2 से ngAnimate का लाभ उठाता है Bootstrap3 के लिए एक काम कर देशी कार्यान्वयन AngularStrap में है +

तुम भी चेकआउट कर सकते हैं:

6

ठीक है, जब तक आप इस नए अंदाज़ में करना चाहते हैं, अन्यथा मुझे लगता है कि पहले से ही एक समाधान है।

चेक बाहर AngularUI से this। यह ट्विटर बूटस्ट्रैप के बिना चलता है।

+1

: http://plnkr.co/edit/gist:4464334?p=preview – ProLoser

8

मैं पाया है कि सिर्फ चहचहाना बूटस्ट्रैप का उपयोग कर रास्ता चहचहाना बूटस्ट्रैप डॉक्स कहने के लिए उन्हें काम कर पाने के लिए पर्याप्त है क्रियार्थ द्योतक।

मैं अपने व्यवस्थापक पृष्ठ पर एक उपयोगकर्ता संपादित करें प्रपत्र के घर में एक मॉडल का उपयोग कर रहा हूँ। जिस बटन को मैं लॉन्च करने के लिए उपयोग करता हूं वह एक एनजी-क्लिक विशेषता है जो उपयोगकर्ता आईडी को उस दायरे के फ़ंक्शन पर पास करता है, जो बदले में उस सेवा को बंद कर देता है। मोडल की सामग्री अपने स्वयं के नियंत्रक से जुड़ी हुई है जो सेवा से परिवर्तनों और फॉर्म पर प्रदर्शित करने के लिए मूल्यों को अपडेट करती है।

तो .. एनजी-क्लिक विशेषता वास्तव में केवल डेटा को पास कर रही है, मोडल अभी भी डेटा-टॉगल और href टैग के साथ ट्रिगर है। मोडल की सामग्री के लिए, यह आंशिक है। इसलिए, मेरे पास पृष्ठ पर कई बटन हैं जो सभी मार्कअप में मौजूद मोडल के एकल उदाहरण को ट्रिगर करते हैं, और बटन पर क्लिक करके, उस मोडल में फ़ॉर्म पर मान अलग-अलग होते हैं।

मैं अपने कोड पर एक नज़र डालूंगा और देख सकता हूं कि मैं इसे पीएनकेआरआर डेमो बनाने के लिए बाहर खींच सकता हूं या नहीं।

संपादित करें: मैं एक साथ फेंक दिया गया है एक त्वरित plunker डेमो अनिवार्य रूप को दर्शाता हुआ क्या मैं अपने अनुप्रयोग में उपयोग कर रहा हूँ: http://embed.plnkr.co/iqVl0Wb57rmKymza7AlI/preview

बोनस, यह (दो पासवर्ड फ़ील्ड के मैच सुनिश्चित करने के लिए कुछ परीक्षण मिला या के रूप में errored उन्हें प्रकाश डाला गया है), और सबमिट बटन को अक्षम करता है यदि पासवर्ड मेल नहीं खाते हैं, या नए उपयोगकर्ताओं के लिए उपयोगकर्ता नाम और पासवर्ड फ़ील्ड खाली हैं। बेशक, बचाओ कुछ भी नहीं करता है, क्योंकि यह सिर्फ एक डेमो है।

का आनंद लें।

+0

मैंने आपके कोड को लागू करने का प्रयास किया, जब मैं बटन पर क्लिक करता हूं, कुछ नहीं खुलता है ... – guiomie

+0

हम्म .. यह संभव है कि कोणीय और/या बूटस्ट्रैप के नए संस्करणों के साथ कुछ बदल गया हो जिससे चीजें काम न करें। –

4

मैं इसे देर से हो सकता है पता है, लेकिन मैं एक व्यायाम के रूप में क्यों हैंडलर लिए बुला लिया गया कई बार पता लगाने की कोशिश शुरू कर दिया और मैं जब तक किया नहीं रोक पाया: पी

कारण था बस एक बार जब मैंने तय किया कि सब कुछ काम करना शुरू कर दिया है, तो प्रत्येक मॉडल के लिए आपके द्वारा बनाए गए प्रत्येक div में कोई अद्वितीय आईडी नहीं थी।मुझे इस बारे में मत पूछें कि इसके लिए सही कारण क्या है, शायद $ ('#' + scope.modalId) .modal() कॉल के साथ कुछ करना है।

बस हालांकि मैं अपने निष्कर्ष पोस्ट करना चाहिए अगर किसी या यह सिर्फ पासथ्रू का उपयोग :) इस यह पता लगाने की कोशिश कर रहा है

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