2016-05-15 7 views
3
angular.module('demoapp').controller("EventControllerNearPosition", EventControllerNearPosition); 
EventControllerNearPosition.$inject = ["$scope", "ApiEventFactory", "ApiPositionFactory", "UserInteractionMessagesFactory", "$location"] 

function EventControllerNearPosition($scope, apiEvent, apiPosition, UIMfactory, $location){ 
UIMfactory.printUserSuccessMessages(); 
UIMfactory.printUserFailedMessage(); 

getAllPositions(); 

function getAllPositions() { 
    apiPosition.getAllPositions().then(function(data){ 
     $scope.positions = data.requested_positions; 
    }).error(function(error){ 
     UIMfactory.addUserFailedMessage("Something went wrong, try again!"); 
     $location.path("/"); 
    }); 
}; 

$scope.SearchEvent = function(){ 
    apiEvent.showNearbyEvents($scope.position_id).then(function(nearEvents){ 
     $scope.events = nearEvents; 
    }).error(function(error){ 
     UIMfactory.addUserFailedMessage("Something went wrong when fetching the events, try again!"); 
     $location.path("/"); 
    }); 
}; 
}; 

Angular Code^

<div class="event-container"> 
<div> 
    <h3>Ange position</h3> 
    <select id="position" data-ng-model="position_id"> 
     <option data-ng-repeat="position in positions" value="{{position.id}}"> 
      {{position.location_name}} 
     </option> 
    </select> 
</div> 
<div class="form-group"> 
    <input type="submit" class="btn btn-default" data-ng-click="SearchEvent()" value="Skicka"/> 
</div> 

Die select wird nicht die Position binden, die ich von i api bekam. Ich habe die Anwendung debugged und überprüft, dass ich die richtigen Werte zurückbekomme. Ich weiß, dass ähnliche oder "gleiche" Code in anderen Teilansichten arbeiten, so dass ich nicht verstehe, warum es hier nicht funktioniert. Und auch wenn ich die Taste drücke, um "SearchEvent" auszulösen, passiert nichts im Debugger. Ich benutze Firefox, wenn das wichtig ist

Danke für jede Art von Feedback!

Antwort

2

Ich kann nur einen Fehler sehen, sollten Sie data von Antwortobjekt der .then Funktion nehmen.

function getAllPositions() { 
    apiPosition.getAllPositions().then(function(response){ 
     //change in below line 
     $scope.positions = response.data.requested_positions; 
    }, function(error){ 
     UIMfactory.addUserFailedMessage("Something went wrong, try again!"); 
     $location.path("/"); 
    }); 
}; 
+0

Es gibt keine "Daten" als Antwort. Es ist response.requested_position. Requested_positions ist ein Array, das die Positionsobjekte enthält –

0

Ich könnte gut beurteilen, wenn ich die Daten sehen könnte, die Sie als Antwort erhalten. Aber soweit dieses Code-Snippet betroffen ist, wird .then() nicht gut verwendet. Die .then-Methode funktioniert wie .then(RESPONSE FUNCTION, ERROR FUNCTION) Die .error() wurde nicht benötigt, um verwendet zu werden.

function getAllPositions() { 
    apiPosition.getAllPositions().then(function(response){ 
     $scope.positions = response.data.requested_positions; 
    },function(error){ 
     UIMfactory.addUserFailedMessage("Something went wrong, try again!"); 
     $location.path("/"); 
    }); 
}; 
+0

Entschuldigung funktioniert nicht –

+0

Die Variable "response", die ich bekomme, enthält ein Array "requested_position" variabler Objekte. Es ist response.requested_position. –

+0

Gemäß den Praktiken ruft Ihr Controller eine Factory-Methode auf. Die Factory-Methode generiert die $ http-Anfrage. Dies würde auf Antwort in .then() mit $ q als Versprechen warten. Wenn die Anfrage eine Antwort erhält, wird $ q.resolve() ausgeführt, sonst wird $ q.reject ausgeführt. Hier, wenn Sie auf die Daten in der Steuerung zugreifen möchten, die Sie von der Fabrik erhalten haben, wird es immer ein "Daten" -Element haben, in dem Sie Ihre Daten finden werden und die anderen Variablen die Informationen enthalten, die nicht direkt mit Ihrer verbunden sind Ausgabe. –

0

Ich habe mein Problem gelöst. Zuerst habe ich das "s" in response.requested_position (s) entfernt;

Dann habe ich die Answear Pankaj Parkar eingereicht. Außer ich habe nicht die "Daten" in response.data.requested_positions verwendet, weil ich "$ resource" benutze und nicht "$ http" oder wie es heißt!

Vielen Dank für die Rückmeldung !!