Я запускаю приложение Angular, которое извлекает его данные из службы Web API. API возвращает объекты как JSON, а служба Angular (через $ http.get()) возвращает их в контроллер как массив объектов. Довольно нормальный материал.Добавление свойства в объект Angular
Что бы я хотел сделать, это добавить свойство для каждого из возвращаемых объектов, называемых «Selected». Это свойство предназначено исключительно для целей GUI (это объект, выбранный или нет в пользовательском интерфейсе), и его не нужно сохранять каким-либо образом. Я решил, что проще всего было бы перебрать возвращенный массив объектов и просто добавить его. Так что мой код выглядит следующим образом:
function getData() {
myService.getData()
.then(function(data) {
$scope.myData = data.results;
// Add a "Selected" property to each object
$.each($scope.myData, function(item) {
item.Selected = false;
});
}
Когда он попадает в линию, которая говорит, «item.Selected = ложь» это бросить сообщение об ошибке, говоря: «Невозможно присвоить свойство только для чтения Selected».
Непонятно, почему «Selected» доступен только для чтения? Я не знал, может ли Angular обрабатывать некоторые фанковые объекты при чтении данных? Что я здесь делаю неправильно? Или я должен подойти к этому совершенно по-другому?
Примечание (я бы хотел, чтобы не сделать выбранную часть исходного объекта, поскольку она не является репрезентативной для чего-либо связанного с этим объектом).
У вас есть верные данные? При использовании 'strict mode' * (который, я надеюсь, вы есть) *, попытка присвоить свойство примитивному значению (например, строка или логическое значение) вызовет эту ошибку. – doldt
Можете ли вы подтвердить, что после присвоения '$ scope.myData = data.results;', '$ scope.myData' действительно является ожидаемым массивом? – GPicazo
Если вы используете выбранный только в пользовательском интерфейсе и всегда устанавливаете значение false, зачем устанавливать его вообще? Просто установите значение true, когда оно выбрано, и значение false, если оно не выбрано. – Bryant