簡體   English   中英

向Angular對象添加屬性

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM