Angularjs 角度函数默认数据在视图中出现错误
我正在与Angularjs和Firebase一起开发一个调度应用程序。出于某种原因,当我编写函数来设置默认数据时,日期的顺序是周一、周二、周三、周四、周五,但我的视图显示的日期为周五、周一、周四、周二、周三。不知道为什么或如何修复,其他一切似乎都很好。 app.jsAngularjs 角度函数默认数据在视图中出现错误,angularjs,function,scope,Angularjs,Function,Scope,我正在与Angularjs和Firebase一起开发一个调度应用程序。出于某种原因,当我编写函数来设置默认数据时,日期的顺序是周一、周二、周三、周四、周五,但我的视图显示的日期为周五、周一、周四、周二、周三。不知道为什么或如何修复,其他一切似乎都很好。 app.js angular.module('scheduleApp', ['firebase']) create our main controller and get access to firebase .cont
angular.module('scheduleApp', ['firebase'])
create our main controller and get access to firebase
.controller('mainController', function($scope, $firebase) {
var ref = new Firebase("https://xxxxx.firebaseio.com/days");
var fb = $firebase(ref);
var syncObject = fb.$asObject();
syncObject.$bindTo($scope, 'days');
$scope.reset = function() {
fb.$set({
monday: {
name: 'Monday',
slots: {
100: {
time: '10:00am',
booked: false
},
110: {
time: '11:00am',
booked: false
},
120: {
time: '12:00pm',
booked: false
},
130: {
time: '1:00pm',
booked: false
},
140: {
time: '2:00pm',
booked: false
},
150: {
time: '3:00pm',
booked: false
},
160: {
time: '4:00pm',
booked: false
},
170: {
time: '5:00pm',
booked: false
},
180: {
time: '6:00pm',
booked: false
}
}
},
tuesday: {
name: 'Tuesday',
slots: {
100: {
time: '10:00am',
booked: false
},
110: {
time: '11:00am',
booked: false
},
120: {
time: '12:00pm',
booked: false
},
130: {
time: '1:00pm',
booked: false
},
140: {
time: '2:00pm',
booked: false
},
150: {
time: '3:00pm',
booked: false
},
160: {
time: '4:00pm',
booked: false
},
170: {
time: '5:00pm',
booked: false
},
180: {
time: '6:00pm',
booked: false
}
}
},
wednesday: {
name: 'Wednesday',
slots: {
100: {
time: '10:00am',
booked: false
},
110: {
time: '11:00am',
booked: false
},
120: {
time: '12:00pm',
booked: false
},
130: {
time: '1:00pm',
booked: false
},
140: {
time: '2:00pm',
booked: false
},
150: {
time: '3:00pm',
booked: false
},
160: {
time: '4:00pm',
booked: false
},
170: {
time: '5:00pm',
booked: false
},
180: {
time: '6:00pm',
booked: false
}
}
},
thursday: {
name: 'Thursday',
slots: {
100: {
time: '10:00am',
booked: false
},
110: {
time: '11:00am',
booked: false
},
120: {
time: '12:00pm',
booked: false
},
130: {
time: '1:00pm',
booked: false
},
140: {
time: '2:00pm',
booked: false
},
150: {
time: '3:00pm',
booked: false
},
160: {
time: '4:00pm',
booked: false
},
170: {
time: '5:00pm',
booked: false
},
180: {
time: '6:00pm',
booked: false
}
}
},
friday: {
name: 'Friday',
slots: {
100: {
time: '10:00am',
booked: false
},
110: {
time: '11:00am',
booked: false
},
120: {
time: '12:00pm',
booked: false
},
130: {
time: '1:00pm',
booked: false
},
140: {
time: '2:00pm',
booked: false
},
150: {
time: '3:00pm',
booked: false
},
160: {
time: '4:00pm',
booked: false
},
170: {
time: '5:00pm',
booked: false
},
180: {
time: '6:00pm',
booked: false
}
}
}
});
};
});
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Angular Scheduling</title>
<link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/bootswatch/3.3.0/journal/bootstrap.m in.css">
<link rel="stylesheet" href="style.css">
<!-- JS -->
<!-- load Angular, Firebase, Firebase Angular Library, and custom app.js -->
<script src="http://cdnjs.cloudflare.com/ajax/libs/angular.js/1.3.0/angular.min.js"></script>
<script src="https://cdn.firebase.com/js/client/1.1.1/firebase.js"></script>
<script src="https://cdn.firebase.com/libs/angularfire/0.8.0/angularfire.min.js"></script>
<script src="app.js"></script>
</head>
<body>
<div class="container" ng-app="scheduleApp" ng-controller="mainController">
<div class="page-header text-center">
<h1>Schedule City</h1>
</div>
<div class="row times">
<div class="col-xs-4 text-center" ng-repeat="day in days">
<h2>{{ day.name }} </h2>
<div class="time-slot" ng-repeat="slot in day.slots">
<input type="checkbox" id="{{ day.name }}-{{ $index}}" ng- model="slot.booked" ng-disabled="slot.booked">
<label for="{{ day.name }}-{{ $index }}">{{ slot.time }}<br>
<span ng-if="slot.booked">Booked</span>
<span ng-if="!slot.booked">Available</span>
</label>
</div>
</div>
</div>
<p class="text-center">
<a href="#" class="btn btn-primary" ng-click="reset()">Reset</a>
</p>
</div>
</body>
</html>
角度调度
计划城市
{{day.name}
{{slot.time}}
预定
可用
将订单
字段添加到数据中。乙二醇
monday: {
name: 'Monday',
order: '1',
slots: {
etc...
然后呢
ng-repeat="day in days | orderBy:'order'"
ng-repeat="dayName in dayNames"
更新:由于您没有数组,这可能不起作用。有关一些提示,请参见中的迭代对象属性
一个想法是自己在一个新变量中定义顺序,迭代该变量并使用它从原始对象中检索正确的值
$scope.dayNames = ["monday", "tuesday"...];
然后呢
ng-repeat="day in days | orderBy:'order'"
ng-repeat="dayName in dayNames"
然后使用days[dayName]抓取对象,例如。g
ng-repeat="slot in days[dayName].slots"
更新:像这样:
<div class="col-xs-4 text-center" ng-repeat="dayName in dayNames">
<h2>{{ days[dayName].name }} </h2>
<div class="time-slot" ng-repeat="slot in days[dayName].slots">
<input type="checkbox" id="{{ days[dayName].name }}-{{ $index}}" ng- model="slot.booked" ng-disabled="slot.booked">
<label for="{{ days[dayName].name }}-{{ $index }}">{{ slot.time }}<br>
<span ng-if="slot.booked">Booked</span>
<span ng-if="!slot.booked">Available</span>
....
{{days[dayName].name}
{{slot.time}}
预定
可用
....
非常感谢您的全面回复。我已经做了更新,它删除了所有日期的名称,只允许我从第一天的列中选择时间段。即使我在第3天、第4天单击某个时段,该时段也会高亮显示,并仅在第一列中标记为已预订。不过,您确实帮助我走上了正确的方向。@sp312您能展示一下您迄今为止对该解决方案的尝试吗?如果不重写代码将其更改为数组,我就无法找到正确的方法来解决此问题。我意识到angular会自动按字母顺序排列对象,所以为了练习,我做了一个作弊,在每个对象前面按字母顺序添加字母,就像这样。当然不会像这样离开,但至少我现在知道了这个问题,这将使它更容易解决$set({amonday:{name:{Monday',slots:{btuesday:{name:{sunday',slots:{解决这个问题的最好方法似乎是添加对象的键,正如这些链接所示。我会尽快尝试并报告。老实说,我不确定。我用你的代码添加了dayName]和var syncObject=fb。$asObject();syncObject.$bindTo($scope,'dayOrder');$scope.dayOrder=[“星期一”、“星期二”、“星期三”、“星期四”、“星期五”];$scope.reset=function(){fb.$set({星期一:{name:'Mon',slots:{这给了我一个空白页。我得到的最接近的是第一个解决方案