[英]Adding a property to an Angular object
我正在運行一個Angular應用程序,該應用程序從Web API服務中提取其數據。 API將對象作為JSON返回,而Angular服務(通過$ http.get())將它們作為對象數組返回給控制器。 很正常的東西。
我想做的是向每個返回的對象添加一個名為“ Selected”的屬性。 此屬性純粹是出於GUI的目的(是否在UI中選擇了對象),並且不需要以任何方式持久化。 我認為最簡單的方法是遍歷返回的對象數組並添加它。 所以我的代碼看起來像這樣:
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 = false”的行時,它會拋出一條錯誤消息,說“無法分配給只讀屬性Selected”。
我不清楚為什么“ Selected”是只讀的? 我不知道Angular在讀取數據時是否會進行一些時髦的對象處理嗎? 我在這里做錯了什么? 還是我應該以一種完全不同的方式來處理這個問題?
注意(我想避免必須使Selected成為原始對象的一部分,因為它不代表與該對象有關的任何內容)。
使用underscorejs為對象添加屬性,
“每個_.each(list,iteratee,[context])別名:forEach對元素列表進行迭代,依次將每個元素生成一個iteratee函數。如果傳遞了iteratee,則將它綁定到上下文對象。每次調用使用三個參數調用iteratee :(元素,索引,列表)。如果list是JavaScript對象,則iteratee的參數將是(值,鍵,列表)。返回鏈表。”
“ extend _.extend(destination,* sources)將源對象中的所有屬性復制到目標對象,然后返回目標對象。它是有序的,因此最后一個源將覆蓋先前的同名屬性論據“。
$scope.myData = data.results;
// Add a "Selected" property to each object
_.each($scope.myData, function(ent) {
_.extend(ent, {
Selected : false
});
});
實際上,您的調試器屏幕快照會為您提供比您發布的消息更有用的錯誤消息(強調我的消息):
無法將只讀屬性“ Selected”分配為0
這表明,您獲得的是數字而不是對象,作為item
變量(在這種情況下為0)。 在嚴格模式下將屬性分配給基元會引發此“無法分配給只讀屬性”錯誤。 (沒有嚴格模式,它只會靜默失敗。)
正如JcT在評論中指出的那樣,這是因為$.each
調用了傳遞了2個參數的函數,索引是第一個,值是第二個。 請參閱$.each
的文檔 :
打回來
類型:函數(整數indexInArray,對象值)
因此,即使您將參數item
命名為,它也會收到當前索引的值。 這意味着只需將缺少的第一個參數添加到回調中即可修復代碼,如下所示:
function getData() {
myService.getData()
.then(function(data) {
$scope.myData = data.results;
// Add a "Selected" property to each object
$.each($scope.myData, function(index, item) { //index was added here!
item.Selected = false;
});
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.