更新:问题几乎*修复。当我使用如下所示的$ watch时,我可以获得更新的周数范围,但是如果没有刷新,任务就不会显示在视图中。
scope.$watch(function(){
return scope.list;
},updateList);
function updateList() {
scope.list.$loaded().then(function(){
scope.weeks = sortItems(parseItems(scope.list));
});
}
使用之前的$ watch,任务在视图中实时更新,但我无法在周范围之间转换。
scope.list.$watch(updateList);
同时使用两者“一切正常”......但这不可能是正确的。
更新:我有一个无关的错误,导致我误解了这里的实际问题。当$ asArray()列表被创建并附加到函数内部的$ scope时,并不是$ scope不可用 - 实际问题是当我用新参数重新运行该函数时,$ scope不会更新参数。
更新:我目前正在尝试将populateTasks功能移动到服务中。目前还不清楚我应该在哪里设置,更新和更改startAt和endAt ref。将这些值保留在服务中,然后在控制器中触发,以便它们再次更新服务?这里的任何建议将不胜感激。
这是我从控制器运行的功能:
var populateTasks = function(start, end){
console.log(this does run multiple times but the $scope does not update);
$scope.start = start;
$scope.end = end;
var ref = new Firebase('https://plnkr.firebaseio.com/tasks').startAt(start).endAt(end);
var list = $firebase(ref).$asArray();
$scope.list = list;
};
当我第一次运行它时,会创建$ scope.list并在其中包含一系列任务。当我通过传入新的(开始,结束)参数再次运行它时,范围不会改变。
如果我尝试运行$ scope。$ apply()我收到一条错误,指出“错误:[$ rootScope:inprog] $已经在申请中”
这是最新的plnkr:http://plnkr.co/edit/0EdLH3gGoUrWcQkOeukt
在上面的plnkr中,我删除了隔离范围,并将指令内容移到了templateUrl之外。这没有用。