programing

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

newstyles 2023. 2. 23. 22:09

각도 리소스에 의해 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로 설정되어 있다.true작업 목록에서 ngResource 모듈은 응답으로 수신된 각 항목에 대해 반복하여 리소스의 새 인스턴스를 생성합니다.이 작업을 수행하려면 Angular는 수신된 항목과 항목 간에 깊은 복사를 수행합니다.Resourceclass: 특별한 메서드를 가진 객체를 제공합니다($save,$delete등)

출처를 확인해 주세요.

internal angular는 angular.copy를 사용하여 딥 복사를 수행합니다.이 함수는 오브젝트 어레이에서만 동작하며 문자열을 전달하면 오브젝트처럼 취급됩니다.

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

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

각 문자는 인덱스가 키로 설정된 객체의 값이 됩니다. ngResource는 리소스에 속성을 제공합니다.0그리고.1.


선택할 수 있는 것은 다음과 같습니다.

하위 수준 $http 서비스 사용

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

json 응답에 개체 어레이를 반환합니다.

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

응답을 가로채고 데이터를 변경합니다.

서버가 반환하는 데이터를 수정할 수 없고 ngResource를 사용하려면 응답을 변환해야 합니다.방법은 이쪽에서 확인

저도 이것 때문에 고생하고 있어요.다음은 쿼리를 사용하여 서비스를 슬림하게 조정한 솔루션입니다.

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