2016-05-26 6 views
0

Ich bin ziemlich neu in Angular + CoffeeScript und verwende es für ein Rails-Projekt. Ich versuche eine Funktion im Controller zu erstellen, die ausgeführt wird, wenn ich auf eine Schaltfläche in einer Ansicht klicke.Eckige Controller-Funktion wird in CoffeeScript nicht erkannt

Dies ist der html

<div id="labs"> 
    <div class="clients" ng-repeat="client in clients" ng-class="{first: $index == 0}"> 
    <h1>{{client.name}}</h1> 
    <div class="labs"> 
     <ul> 
     <li ng-repeat="lab in client.labs"> 
      <a ng-href="/#!/labs/{{lab.id}}/process"> 
      <button ng-click = "test()">Test</button> 
      <span>{{lab.name}}</span> 
      <span>{{lab.created_at | date:'MMMM yyyy' }}</span> 
      </a> 
     </li> 
     </ul> 
    </div> 
    </div> 
</div> 

Dies ist der Controller ist

angular.module("deloitte").controller('labsCtrl', ['$scope', 'labService','labPreferencesService', ($scope, labService, labPreferencesService) -> 

    labService.query (data) -> 
    $scope.clients = data 
    # console.print (clients) 

     $scope.test -> console.log("Hello!"); 
]) 

Und das ist der Fehler

angular.js?body=1:5755 TypeError: $scope.test is not a function 
    at new <anonymous> (labsController.js?body=1:7) 
    at invoke (angular.js?body=1:2903) 
    at Object.instantiate (angular.js?body=1:2915) 
    at angular.js?body=1:4806 
    at update (angular.js?body=1:14199) 
    at Object.Scope.$broadcast (angular.js?body=1:8308) 
    at angular.js?body=1:7464 
    at wrappedCallback (angular.js?body=1:6847) 
    at wrappedCallback (angular.js?body=1:6847) 
    at angular.js?body=1:6884 

ich die Syntax nachgeschlagen und es scheint richtig. Doing = -> löst ebenfalls einen Fehler aus. Hilfe wäre willkommen

+0

Ihr Einzug ist falsch. Zufälliges Einrücken in CS verursacht Probleme. –

+0

Auch macht es keinen Sinn, wie geschrieben, du musst es * zuweisen, um es zu testen; Sie geben keine Funktion in der Steuerung "test". –

Antwort

1

Möchten Sie .test() Funktion auf Ihrem $scope anrufen oder definieren?

$scope.test -> console.log("Hello!"); 

// Generates 
$scope.test(function() { 
    return console.log("Hello!"); 
}); 

Wenn Sie definieren möchten/zuordnen:

$scope.test = -> console.log("Hello!"); 

// Generates 
$scope.test = function() { 
    return console.log("Hello!"); 
}; 

und das ist wahrscheinlich das, was Sie wollen.

+0

Hallo Usbekjön! Wie ich in der Post gesagt habe - es wirft einen Fehler mit dem Gleichheitszeichen und dem Pfeil auf. Ich bin mir nicht sicher, ob das an seinen Schienen liegt. Obwohl ich verstehe, Tutorials von coffeescript umreißen die Methode oben. – Shashank

+0

Was sollten wir tun, wenn ein Parameter hinzugefügt werden soll? – Shashank

+0

@Shashank \t Fügen Sie einen Parameter hinzu. –