2013-03-07 76 views
0

重新考慮了我的Angular應用程序通過工廠服務傳遞基本數據。現在突然間ng-repeat不會向頁面輸出任何內容,它根本不會運行,並且我不會收到錯誤消息!發生了什麼?ng-repeat不做任何事情

<ul ng-repeat="section in sections"> 
    <li class="section_title {{section.active}}" > 
     {{section.name}} 
    </li> 
    <ul> 
     <li class="tutorial_title {{tutorial.active}}" ng-click="loadFromMenu([$parent.$index, $index])" ng-repeat="tutorial in AppData.section.tutorials"> 
      {{tutorial.name}} 
     </li> 
    </ul> 
</ul> 


    var Tutorials = angular.module('Tutorials', ['functions', 'tutorials']); 

Tutorials.factory("AppData", function(){ 
    return { 
     sectionNumber: 0, 
     tutorialNumber: 0, 
     questionNumber: 0, 
     sections: sections 
    } 
}) 

Tutorials.run(function(AppData){loadFromMenu([0,0, true], AppData);}) 

function loadFromMenu (tut, AppData) { 
    if (tut[1] === AppData.tutorialNumber && tut[0] === AppData.sectionNumber && !tut[2]) {//if clicked on already playing tut 
     return; 
    } 
    if (tut[1] !== undefined && tut[0] !== undefined) { 
     AppData.tutorialNumber = tut[1]; 
     AppData.sectionNumber = tut[0]; 
    } 
    var section = AppData.sections[tut[0]]; 
    for (var x in AppData.sections) { 
     AppData.sections[x].active = "inactive"; 
     for (var y in AppData.sections[x].tutorials){ 
      AppData.sections[x].tutorials[y].active = "inactive"; 
     } 
    } 
    section.active = "active"; 
    section.tutorials[tut[1]].active = "active"; 
    //$scope.$apply(); 
    AppData.questionNumber = 0; 
    if (AppData.sectionNumber === 1){ 
     conjugationController(); 
    } 
}; 
+0

你可以發佈你的控制器和'loadFromMenu'嗎? – 2013-03-07 18:15:02

+0

loadFromMenu()是這裏唯一與標記相關的控制器,我發佈了它。原本我在身體部位有一個大控制器,其他一切都發生在那裏,我擺脫了這一點,它停止工作。 – Tules 2013-03-07 18:19:11

回答

2

基於您的代碼,你的問題是,你實際上不是使用控制器。一個控制器就是我們如何以編程方式訪問範圍,我們從中分配我們從服務中獲得的範圍。觀點也與示波器相關聯。所以當你說ng-repeat="section in sections"時,它正在尋找當前範圍sections上的一個屬性。在大多數情況下,這將對應於您的控制器中說$scope.sections = ...的內容。我在你的代碼中看不到這樣的東西。以下是它應該如何工作。

<div ng-controller="MainCtrl"> 
    <ul ng-repeat="section in sections"> 
    <li class="section_title {{section.active}}" > 
     {{section.name}} 
    </li> 
    <ul> 
     <li class="tutorial_title {{tutorial.active}}" ng-click="loadFromMenu([$parent.$index, $index])" ng-repeat="tutorial in AppData.section.tutorials"> 
     {{tutorial.name}} 
     </li> 
    </ul> 
    </ul> 
</div> 

(PS:嵌套的UL你的方式是不是真的有效的HTML,你會希望把內UL在LI)

現在我不知道外面什麼存在ul,所以我只是讓它成爲div,我們在那裏告訴查看哪個控制器分配給頁面的那一部分。所以現在我們的控制器必須將這些變量放在示波器上:

Tutorials.controller('MainCtrl', function (AppData) { 
    $scope.sections = AppData.sections; 
}); 

現在它會工作。至於loadFromMenu函數的其餘部分,您希望將其中的大部分移植到您的控制器,但我不確定您要如何處理該run塊或loadFromMenu函數。因此,這是一個總體原則:服務數據的通用操作應該發生在服務中。

隨意發表評論與更多的信息,我會更新這個答案,但ngRepeat不起作用的原因是因爲你沒有控制器,你的sections變量永遠不會被分配到範圍。

+0

似乎我第一次就對了! – Tules 2013-03-07 19:05:42