2016-07-10 7 views
0

Ich erstelle eine einfache eckige App in meiner Rails-App, um eine Liste der registrierten Benutzer anzuzeigen. Das Ziel wird schließlich sein, alle Benutzer einfach durchzuschleifen und eine zufällige auszuwählen, ihr Attribut von "Gewinner" auf "wahr" zu aktualisieren und auf dem DOM neben ihrem Namen oder vielleicht einer Warnung zu aktualisieren, um den Gewinner zu zeigen.Rails/Angular JS: Ngclick scheint nicht zu funktionieren

Ich habe eine neue Testfunktion "showPool" erstellt, um zu sehen, ob ngClick funktioniert, aber es scheint überhaupt nicht zu funktionieren (I. E. klicke auf die Knöpfe und sie tun nichts). Kann jemand sehen, was ich vermisse?

HTML:

<% if user_signed_in? && current_user.role == "Admin" %> 

    <h1 class="center">Winner Raffler</h1> 
    <h4 class="center">To select a winner for this year's scholarship, simply click "choose winner" below</h4> 

    <div ng-controller="rafflerController"> 
     <ul> 
      <li ng-repeat="user in users"> 
       {{"Applicant Name:" + " " + user.first_name + " " + user.last_name + " " + "Winner?" + user.winner}} 
       <span ng-show="user.winner">Winner</span> 
      </li> 
     </ul> 

    </div> 
<button ng-click="drawWinner()">Draw Winner</button><br> 
<button ng-click="showPool()">Show List of Potential Winners </button> 
<% end %> 

Javascript Datei:

//Pool of Winners 
var pool = []; 

var rafflerApp = angular.module('rafflerApp', ["ngResource"]); 

rafflerApp.controller('rafflerController', function($scope, $resource) { 
     User = $resource("/users.json", {id: "@id"}, {update: {method: "GET", isArray:true}}) 
     $scope.users = User.query() 

     //Show User Pool List 
     $scope.showPool = function() { 
      if (pool.length === 0) { 
       alert("There are currently no available users in pool."); 
      } else { 
       alert("There are currently" + pool.length + " potential winners in the user pool."); 
      } 
     } 

     //Draw a New Winner 
     $scope.drawWinner = function(){ 
      angular.forEach($scope.users,function(user){ 
       if(!user.winner){ 
        pool.push(user) ; 
       } 
      }); 
      if(pool.length >0) { 
       user = pool[Math.floor(Math.random()*pool.length)]; 
       user.winner = true; 
       $scope.lastWinner = user; 
      } 
     } 

}); 
+0

Try um ein 'value' Attribut in dein '

+1

Mögliches Duplikat von [AngularJS ng-click funktioniert nicht in IE11] (http://stackoverflow.com/questions/25300575/angularjs-ng-click-not-working-in-ie-11) – developer033

+0

Es ist weil es außerhalb des Controllers war , es funktioniert jetzt gut, danke! –

Antwort

2

Sie benötigen Tasten im Rahmen Ihres div zu stellen, dass Sie die rafflerController Controller initiieren mit:

<div ng-controller="rafflerController"> 
    <ul> 
     <li ng-repeat="user in users"> 
      {{"Applicant Name:" + " " + user.first_name + " " + user.last_name + " " + "Winner?" + user.winner}} 
      <span ng-show="user.winner">Winner</span> 
     </li> 
    </ul> 
//YOUR CODE GOES HERE INSTEAD 
<button ng-click="drawWinner()">Draw Winner</button><br> 
<button ng-click="showPool()">Show List of Potential Winners</button> 

</div> 
+0

Solch ein einfacher kleiner Fehler, es funktioniert perfekt, ich kann jetzt vorwärts gehen. Vielen Dank! –

+0

hast du irgendwelche Vorschläge, wie ich eckig mit Schienen besser lernen kann? Wie kann ich meine Datenbank über Javascript aktualisieren? Im Moment habe ich die Benutzer thign arbeiten ok, aber die Änderung der Gewinner zu wahren bleibt nicht und aktualisieren in der Datenbank –

+0

yeah Ich war schon immer ein großer Befürworter der Thinkster Tutorials (sie haben eine ziemlich gute Eins MEAN) - Wie auch immer, sieh dir das an: https://thinkster.io/angular-rails – otherstark

Verwandte Themen