2013-11-26 9 views
6

के साथ angularjs के साथ एक HTML बटन कैसे जोड़ें I angularjs से बने गेम पर काम कर रहा हूं। मुझे एक समस्या है कि मैं अभी तक हल करने में सक्षम नहीं हूं। मैं एक पॉपअप संवाद (कोई चेतावनी) का उपयोग करना चाहूंगा जिसका सामग्री संदर्भ पर निर्भर करता है। इस पॉपअप में एक बटन होता है, जब क्लिक किया जाता है तो गेम शुरू होता है।एक काम करने वाले एनजी-क्लिक फ़ंक्शन

चूंकि सामग्री गतिशील है ng-click फ़ंक्शन काम नहीं करता है।

मैंने निर्देशकों से सीधे और नियंत्रक से कोशिश की है लेकिन इसे काम करने के लिए नहीं मिला है।

मेरा ठोस सवाल यह है कि मैं एंजुलरजेज़ के साथ HTML बटन कैसे जोड़ूं जिसमें एक एनजी-क्लिक फ़ंक्शन है जो वास्तव में आग लग जाएगा?

संपादित करें: यहाँ एक प्रयास (है कि वास्तव में बटन को दिखाने के लिए हो जाता है, लेकिन एनजी क्लिक कुछ नहीं करता है): नियंत्रक:

{ 
     if ($scope.quiz.state === 'finished' || $scope.quiz.state === 'initialized') { 
      var startButton = '<br><br><button data-ng-click="startQuiz">start quiz</button>'; 
      $scope.popupText = $sce.trustAsHtml('Stating ' + quiz.name + startButton); 
      $scope.showStart = false; 
      $scope.showPopup = true; 
     } 
    }; 
    $scope.startQuiz = function() { 
     $scope.showPopup = false; 
     if ($scope.quiz.state === 'initialized') { 
      $scope.quiz.start(); 
      $scope.quizTimer.start($scope, $timeout); 
     } 
    }; 

एचटीएमएल:

<div id="popupBox"> 
    <div id="closePopup" data-ng-click="closePopup()">X</div> 
    <div data-ng-bind-html="popupText"></div> 
</div> 
+0

हम अनुमान लगा सकते हैं कि आप कुछ कोड – charlietfl

+0

देखे बिना ऐसा करने का प्रयास कैसे कर रहे हैं, मुझे लगता है कि आप कुछ ऐसा करना चाहते हैं जैसे ng-click = "$ rootcope.broadcast (ईवेंट, डेटा)"। जो भी नियंत्रक घटना के लिए आपका गेम सुनना शुरू कर देता है। –

+0

समस्या को हल करने के लिए आपको यह स्पष्ट करने के लिए अपने स्वयं के उत्तर को सही के रूप में चिह्नित करना चाहिए। आप इसके अलावा अन्य उपयोगी उत्तरों को ऊपर उठा सकते हैं। – lex82

उत्तर

3

अन्य उत्तर मैं इसे निम्न कार्य करके काम मिल गया से मदद का उपयोग करना (। यह शायद सबसे अच्छा तरीका नहीं है, लेकिन यह काम करता है अगर वहाँ किसी न किसी प्रकार है इस सुधार करने के लिए टिप्पणी दें।):

नियंत्रक :

... 
    $scope.compiledStartPopupText = $compile(angular.element('<br><br><button data-ng-click="startQuiz()">start quiz</button>'))($scope); 
    $scope.popupText = 'Starting ' + $scope.quiz.name; 
    $scope.getCompiledStartPopupText = function() { 
     return $scope.compiledStartPopupText; 
    }; 
    $scope.openStartQuizPopup = function() 
    { 
     if ($scope.quiz.state === 'finished' || $scope.quiz.state === 'initialized') { 
      if($scope.quiz.state === 'finished') { 
       $scope.quiz.reinitialize(); 
      } 
      $scope.showPopup = true; 
     } 
    }; 
    $scope.closePopup = function() { 
     $scope.showPopup = false; 
     if($scope.quiz.state !== 'started') { 
      $scope.showStart = true; 
     } 
    }; 
    $scope.startQuiz = function() { 
     $scope.showStart = false; 
     $scope.showPopup = false; 
     if ($scope.quiz.state === 'initialized') { 
      $scope.quiz.start(); 
      $scope.quizTimer.start($scope, $timeout); 
     } else if ($scope.quiz.state === 'finished') { 
      $scope.quiz.restart(); 
      $scope.quizTimer.restart($scope, $timeout); 
     } 
    }; 
    $scope.endGame = function() 
    { 
     $scope.quiz.state = 'finished'; 
     $scope.showPopup = true; 
     $scope.showStart = true; 
    }; 
    ... 

निर्देशक:

directive('popUp', function() { 
     return { 
      restrict: 'A', 
      link: function($scope, elm, attrs) { 
       $scope.$watch('quiz.state', function(value){ 
        if(value === 'finished') { 
         elm.html('finished'); 
        } else { 
         var compiledStartButton = $scope.getCompiledStartPopupText(); 
         elm.html($scope.popupText); 
         elm.append(compiledStartButton); 
        } 
       }); 
      } 
     }; 
    }; 

HTML:

<div id="popup" ng-show="showPopup"> 
     <div id="popupBox"> 
      <div id="closePopup" data-ng-click="closePopup()">X</div> 
      <div data-pop-up class="cta"></div> 
     </div> 
    </div> 
+0

चूंकि कोई प्रतिक्रिया नहीं आई है, इसलिए मैंने इस जवाब को चिह्नित किया है। फिर भी अगर कुछ भी है तो मैं बेहतर कर सकता हूं कृपया मुझे बताएं। – cw24

2

आप करने की कोशिश कर रहे हैं, तो कॉल करें closePopup(), मान लीजिए कि आपका ऐप एचटीएमएल के शीर्ष पर शुरू हुआ है और आपके पास ng-controller="MsgCtrl" भी है, नियंत्रक के भीतर आपका कोड

<div id="popupBox"> 
    <div id="closePopup" data-ng-click="closePopup()">X</div> 
    <div data-ng-bind-html="popupText"></div> 
</div> 

और फिर अपने ऐप की लिपि में, एक similar example के लिए इस पर इस

function MsgCtrl($scope) { 
    $scope.closePopup = function() { 
     console.log("function called"); 
    }; 
} 

देखो और इसके साथ प्रयोग की तरह कुछ लिखें।

+0

धन्यवाद, लेकिन पॉपअप को बंद करने में समस्या नहीं थी।मुझे पॉपअप के पाठ को बदलने की आवश्यकता है और उपयोगकर्ता के प्रारंभ होने पर क्लिक करने के लिए एक बटन जोड़ना होगा। – cw24

2

$compile service का उपयोग करके, आप एक निश्चित दायरे के संदर्भ में मनमानी HTML का मूल्यांकन कर सकते हैं। उदाहरण:

var element = $compile(angular.element('<button ng-click="doSomething()"></button>'))(scope); 

चर element तो (या jQuery अगर आप इसे उपयोग कर रहे हैं) एक angular.element होता है, जो डोम में कहीं भी सम्मिलित कर सकते हैं। बटन पर क्लिक करने से परिणामस्वरूप scope.doSomething() का आविष्कार होगा। उम्मीद है की यह मदद करेगा।

+0

धन्यवाद इस पहेली में एक और टुकड़ा जोड़ा। मुझे पूरा यकीन नहीं था कि पहले "तत्व" कहां जोड़ें। अंत में मैंने निर्देश में इसका इस्तेमाल करने का फैसला किया। – cw24

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

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