2013-10-30 62 views
1

我可能會缺少一些基本的東西,但我堅持如何做到這一點。

我有一個NG-重複塊:

<div data-class-block  
    ng-repeat="class in classList(1304)" 
    data-object="class"> 
</div> 

這是叫我的一個功能:

$scope.classList = function(semester){ 

    var list = myClassesFactory.list(semester) 
    .then(function (data){ 
    return data.classes; 
    }, function (error){ 
    console.log('ruh roh: error in myclasses controller'); 
    }); 

    return list; 
}; 

這又調用工廠:

myclassesNest.factory('myClassesFactory', ['$http', '$resource', '$q', function ($http,  $resource, $q) { 
    var myClassesResource = $resource(':sem/myclasses.json', 
    {}, 
    {'query': {method: 'GET', params: {sem: '@sem'}, isArray: false} }); 

    var factory = { 
    list : function(semester) { 
     var deferred = $q.defer(); 
     myClassesResource.query({sem:semester}, 
     function (resp) { 
     deferred.resolve(resp); 
     }); 
     return deferred.promise; 
    } 
    }; 
    return factory; 
}]); 

這完全炸燬瀏覽器拋出錯誤後錯誤,直到選項卡崩潰。大聲笑。 Probabaly與消化週期有關,無可否認這是Angular的一個領域,我並不完全理解。

我把呼叫打包到myClassesFactory.list的函數中,因爲當我將它直接賦值給$scope變量時,我得到一個錯誤,說它是一個對象而不是函數。

TLDR;我需要能夠從模板中傳入一個學期來選擇從端點返回的哪組類資源。

任何幫助,非常感謝!

(之前有人說要閱讀$ resource docs,我想說我今天有好幾次了,而且那裏的例子沒有說明這一點,因爲他們將參數硬編碼到控制器)。

+0

你可以告訴你是否回來的JSON?什麼是錯誤被拋出?你可以把一個展示行爲的JSFiddle例子放在一起嗎? –

回答

1

您明確聲明從查詢調用返回的內容不會是數組。它會拋出一個錯誤,如果是這樣,它可能是因爲你正在尋找類(複數尖叫數組給我)。如果您將此更改爲true,它是否有效?

EDITED 您正在進入摘要循環循環。摘要的工作方式如下所示:http://docs.angularjs.org/guide/concepts#runtime

當您的電話回來時,它會觸發對頁面的更新,該頁面將調用另一個服務,以重新開始循環。

更好的解決它,就像你顯然做的那樣。

+0

這是一個數組,儘管更改不能解決問題。 :/我已經用另一種方式解決了這個問題,儘管我仍然很想知道如何讓它工作。現在我已經設置了一個範圍變量來保存當前學期,因此我可以將它傳遞給控制器​​內部的資源查詢(這很奇怪)。我今天沒有足夠的時間把它作爲一個小提琴遺留下來。我會在接下來的幾天嘗試。謝謝您的幫助! – Askdesigners

+0

拋出的錯誤是什麼? –

+0

着名的10次迭代消解週期錯誤。 – Askdesigners