ng-repeat不做任何事情
重新考虑了我的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();
}
};
基于您的代码,你的问题是,你实际上不是使用控制器。一个控制器就是我们如何以编程方式访问范围,我们从中分配我们从服务中获得的范围。观点也与示波器相关联。所以当你说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
变量永远不会被分配到范围。
似乎我第一次就对了! – Tules 2013-03-07 19:05:42
你可以发布你的控制器和'loadFromMenu'吗? – 2013-03-07 18:15:02
loadFromMenu()是这里唯一与标记相关的控制器,我发布了它。原本我在身体部位有一个大控制器,其他一切都发生在那里,我摆脱了这一点,它停止工作。 – Tules 2013-03-07 18:19:11