Первый раз, пытаясь получить данные 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
});
В вашей функции успеха привяжите свои данные к $ scope.data следующим образом:
$scope.data = data
Затем - в вашем html все ваши ng-модели, ng-values и т.д. Будут связаны как таковые:
<p>{{data.someKey}}</p><img ng-src="data.imgSrc" />....
Кроме того, его небезопасно перекладывать многие ключи произвольно по охвату. И я не имею в виду случайные.data или. Что бы ни добавлялось в область видимости. Но когда вы слепо повторяете объект и привязываете каждый ключ к $ scope, вы рискуете перезаписать другой ключ, который уже может быть установлен, или ключ, который ваш параметр будет перезаписан позже в контроллере. Возможно, у вас есть функция, привязанная к области видимости, которая перезаписывается слепое назначением или наоборот.
Как уже упоминалось, вы можете просто задать элемент в области $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
Вы можете просто установить $scope.data = data;
...
Тогда, на ваш взгляд, вы можете получить доступ к data.SiteID
или data.SiteCode
и т.д.
Нет. В угловом режиме вы должны помещать данные в область ($ scope) один за другим внутри контроллера, тогда вы можете получить к нему доступ в HTML либо {{blah}}, либо использовать директиву ng-models, ng-values и т.д.
$scope.something = data
и тогда ваши представления будут выглядеть так:{{something.WhateverIsInJSONID}}
$scope.something = data
{{something.WhateverIsInJSONID}}
или что-то еще