program tip

각도 리소스에 의해 2d로 구문 분석되는 1 차원 문자열 배열

radiobox 2020. 11. 28. 08:57
반응형

각도 리소스에 의해 2d로 구문 분석되는 1 차원 문자열 배열


서버의 다음 JSON 응답

[
    "hello",
    "world"
]

이 ngResource 서비스에 의해 2D 배열로 구문 분석되고 있습니다.

myService.factory('Name', function($resource){
    return $resource(site_url+'api/accounts/:accountId/names/', {}, {
        list: {method:'GET', params:{}, isArray:true}
    });
});

그렇게 불렀다

$scope.names = Name.list({accountId:$scope.account.id}, function(e){
    console.log(e);
});

추적

[{"0":"h","1":"e","2":"l","3":"l","4":"o"},{"0":"w","1":"o","2":"r","3":"l","4":"d"}]

힌트가 있습니까?


TLDR; ngResource는 객체 나 배열 기대 오브젝트 당신의 응답을.


작업 목록에서 이로isArray 설정 되면 ngResource 모듈은 응답에서 수신 된 각 항목을 반복하고 리소스의 새 인스턴스를 만듭니다. 항목 사이의 깊은 사본 수신이 각도를 수행하고 수행 우리에게 특별한 방법으로 객체를 제공 클래스 ( , 등등)를trueResource$save$delete

여기 에서 소스를 확인 하십시오 .

내부적으로 angular는 angular.copy 를 사용하여 깊은 복사를 수행하고이 함수는 객체배열 로만 작동 합니다. 문자열을 전달할 때 객체처럼 취급합니다.

JS의 문자열은 각 문자에 대한 순차적 액세스를 제공하여 배열로 작동 할 수 있습니다. angular.copy문자열이 전달되면 다음을 생성합니다.

angular.copy('hi',{})   => {0:'h', 1:'i'}

각 문자는 인덱스가 키로 설정된 객체의 값이됩니다. ngResource 는 속성 01.


선택 사항은 다음과 같습니다.

하위 수준의 $ http 서비스 사용

$http.get('/res').success(function(data){
  $scope.test = data;
});

json 응답에서 객체 배열 반환

[{'data': "hello"}, {'data': "world"}] 

응답을 가로 채서 데이터를 변경하십시오.

서버가 다시 보내는 데이터를 수정할 수없고 ngResource 를 사용 하려면 응답을 변환해야합니다. 여기에서 방법 읽기


나는 이것으로도 어려움을 겪고 있습니다. 쿼리를 사용하여 서비스를 slighly 조정하여 내 솔루션은 다음과 같습니다.

var app = angular.module('testApp', ['ngResource']);

app.factory('Name', function($resource, $sce) {
  var path = "test.json";

  return $resource(path, {}, {
    query: {
      method: 'GET',
      isArray: false
    }
  })
});

app.controller('testController', function($scope, Name) {
  $scope.result;

  $scope.getResult = function() {
    Name.query(function(data) {
      $scope.result = data;
    });
  };

  $scope.getResult();
});

HTML :

<!DOCTYPE html>
<html ng-app="testApp">

<head>

  <link href="style.css" rel="stylesheet" />
  <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js"></script>
  <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular-resource.min.js"></script>

  <script src="script.js"></script>
</head>

<body ng-controller="testController">
  <h1>{{result.surname}}</h1>

</body>

</html>

및 JSON 파일 :

{
    "name": "Homer",
    "surname":  "Simpson",
    "Town": "Springfield"
}

관심이 있다면 Plunker도 작동합니다 : http://plnkr.co/edit/SwqlZyqZ4zfcpaLxaf39

이것이 누군가를 돕기를 바랍니다 ...

참고 URL : https://stackoverflow.com/questions/13813673/one-dimensional-array-of-strings-being-parsed-to-2d-by-angular-resource

반응형