2015-01-28 4 views
1

AngularJS로 REST 요청을 할 때 약간의 문제가 있습니다. PHP (Laravel)에서 서버 부분을 수행 했으므로 POSTMAN을 사용하여 테스트했으며 제대로 작동합니다. 난 그냥 {"expression":"(2+5)"}처럼 json을 보내고 난 {"expression":"(2+5)","result":"7"} 같은 json을 얻을 POST/표현을 가지고, 몇 가지 POST 요청을 할 때 결과가 내 result.html 페이지에 연결해야합니다. 나는 경로를 제공 app.js를 쓰고, 나는 contoller.js AngularJS, 공장, POST 수행 후 GET 메소드

//post expression 
myApp.controller('expressionController', ['$scope', 'postExpressionFactory', 'getExpressionFactory','$location', 
    function ($scope, postExpressionFactory,getExpressionFactory, $location) { 
     $scope.postNewExpression = function() { 
      $scope.results = postExpressionFactory.evaluate({'expression':$scope.expression}); 
      console.log($scope.results.expression); 
      console.log($scope.results.result); 
     }; 
    }]); 

을 가지고 services.js

//post factory 
myServices.factory('postExpressionFactory', ['$resource', 
    function ($resource) { 
     return $resource('../server.php/expression', {}, { 
      evaluate: {method: 'POST', headers: {'Content-Type': 'application/json'}, isArray: false} 
     }); 
    }]); 

에 공장을 가지고이 게시물 요청

<form> 
    <div class="row"> 
     <div class="col-lg-12"> 
      <div class="form-group"> 
       <label class="control-label">Enter expression</label> 
       <div class="input-group"> 
        <span class="input-group-addon">=</span> 
        <input class="form-control" type="text" id="expression" name="result" ng-model="expression" ng-required="true"> 
        <span class="input-group-btn"> 
         <button class="btn btn-default" type="button" ng-click="postNewExpression()">Calculate</button> 
        </span> 
       </div> 
       <h2>Results</h2> 
       <div class="list-group" ng-repeat="res in results"> 
        <a class="list-group-item"> 
         <h4 class="list-group-item-heading">{{res.expression}}</h4> 
         <h4 class="list-group-item-heading">{{res.result}}</h4> 
        </a> 
       </div> 
      </div> 
     </div> 
    </div> 
</form> 
에게 호출하는 HTML을

Angular가 잘 돌아 간다. 나는 json을 올바르게 만들지 못한다고 생각한다. mozilla-> network에서 이것을 실행하면 POST 요청을 한 것을 볼 수 있고 json respone 결과를 얻을 수있다. "7", expression : (2+ 5). 어떻게 결과를 얻을 수 있습니까? results.expression, results.result에서 7보다?

답변

1

$ scope.results 객체는 두 개의 속성이있는 것으로 정의되지만 ng-repeat에서 반복 할 때 존재하지 않는 문자열의 속성에 액세스하려고하므로 자동으로 실패합니다.

// your results object: 
$scope.results = postExpressionFactory.evaluate({'expression':$scope.expression}); 

// so your object looks like this: 
{ 
    expression: something, 
    result: somethingElse, 
} 

당신이 그것을 액세스를 시도하는 방법 : 여기 HTML에서

<div class="list-group" ng-repeat="res in results"> 
    <a class="list-group-item"> 
     <h4 class="list-group-item-heading">{{res.expression}}</h4> 
     <h4 class="list-group-item-heading">{{res.result}}</h4> 
    </a> 
</div> 

참조 오류 개체 인쇄하여 :

<div class="list-group" ng-repeat="res in results"> 
    {{ result }} 
    <a class="list-group-item"> 
     <h4 class="list-group-item-heading">{{res.expression}}</h4> 
     <h4 class="list-group-item-heading">{{res.result}}</h4> 
    </a> 
</div> 

// what you probably want is an array for the results, then push onto the array 
$scope.results = []; 

// push 
$scope.results.push(postExpressionFactory.evaluate({'expression':$scope.expression})); 
+0

감사합니다, 그것은 일하고있어. 하지만 난 질문을 하나 더, 나는이 게시물 요청을 내가 서버에서 다른 종류의 대답을 할 때 json {식 : '5 + 7', 토큰 : 'a123'}, 지금이 토큰 값을 가져올 필요가 및 모양 토큰이 있으면 요청을받습니다. 여러 번 시도했지만 $ scope.expression.token에 액세스 할 수 없습니다. 이해한다면 어떻게 할 수 있습니까? 내 논리는 다음과 같습니다. if ($ scope.results.expressionId! == undefined) { $ scope.getNewExpression = function() {$ scope.results.push (getExpressionFactory.result ($ scope.results.expressionId)) ;};} –

+0

(토큰이있는 경우 마지막 멤버를 pop해야한다고 가정) –