AngularJS http получить JSON

0

Первый раз, пытаясь получить данные json и привязать его к моей форме, используя AngularJS. Я могу связать json таким образом, но он требует, чтобы я вручную сопоставлял "данные" с каждым из моих элементов в своем html.

http-вызов от моего контроллера:

  $http.get('static.json').
    success(function(data, status, headers, config) {
      // here I have to manually copy all my json to bind with "data"
      $scope.SiteID = data.SiteID;
      $scope.SiteCode = data.SiteCode;
  }).
  error(function(data, status, headers, config) {
    // log error
  });

Мой json:

{
  "SiteID":"mySiteIDGoesHere",
  "SiteCode":"mySiteCodeGoesHere"
}

Есть ли способ автоматически привязать мой json без необходимости проходить через каждый элемент вручную? например:

  $http.get('static.json').
    success(function(data, status, headers, config) {
      "just pull in whatever my json is and bind it"
      $scope.WhateverIsInJSONID = data.WhateverIsInJSONID;
      $scope.WhateverIsInJSONCode = data.WhateverIsInJSONCode;
  }).
  error(function(data, status, headers, config) {
    // log error
  });
  • 0
    Просто установите $scope.something = data и тогда ваши представления будут выглядеть так: {{something.WhateverIsInJSONID}} $scope.something = data {{something.WhateverIsInJSONID}} или что-то еще
Теги:
rest

4 ответа

1
Лучший ответ

В вашей функции успеха привяжите свои данные к $ scope.data следующим образом:

$scope.data = data

Затем - в вашем html все ваши ng-модели, ng-values и т.д. Будут связаны как таковые:

<p>{{data.someKey}}</p><img ng-src="data.imgSrc" />....

Кроме того, его небезопасно перекладывать многие ключи произвольно по охвату. И я не имею в виду случайные.data или. Что бы ни добавлялось в область видимости. Но когда вы слепо повторяете объект и привязываете каждый ключ к $ scope, вы рискуете перезаписать другой ключ, который уже может быть установлен, или ключ, который ваш параметр будет перезаписан позже в контроллере. Возможно, у вас есть функция, привязанная к области видимости, которая перезаписывается слепое назначением или наоборот.

  • 0
    Эврика, это сработало.
  • 0
    Дай мне немного любви и проверь, как правильно?
1

Как уже упоминалось, вы можете просто задать элемент в области $scope для data а затем ссылаться на него с помощью точечной нотации, например:

$scope.data = data;

А потом:

<span>{{data.WhateverIsInJSONID}}</span>

Если вы хотите, чтобы каждое свойство в $scope индивидуально, вам нужно было бы перебрать их и добавить их, например:

for (var property in data) {
  if (data.hasOwnProperty(property)) {
    $scope[property] = data[property];
  }
}

Что бы дать вам $scope.WhateverIsInJSONID и $scope.WhateverIsInJSONCode

  • 0
    Недостатком вашего цикла for является возможность перезаписи предыдущего ключа, прикрепленного к области. Например, $ scope.someKey = function ... и у вас есть .someKey в возвращаемом объекте данных, для которого вы затем перезаписываете свою функцию. Опасное.
  • 0
    @ Брант, согласился, я бы так не поступил, но чтобы удовлетворить вопрос, я добавил это.
Показать ещё 1 комментарий
1

Вы можете просто установить $scope.data = data;...

Тогда, на ваш взгляд, вы можете получить доступ к data.SiteID или data.SiteCode и т.д.

-1

Нет. В угловом режиме вы должны помещать данные в область ($ scope) один за другим внутри контроллера, тогда вы можете получить к нему доступ в HTML либо {{blah}}, либо использовать директиву ng-models, ng-values и т.д.

  • 0
    Совсем нет.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню