我只是稍微改变了角度,我构建了一个简单的任务API。这个api分配并接受了任务。现在,在构建应用程序时,我有以下路线:
TaskManager.config(['$routeProvider',
function($routeProvider) {
$routeProvider.
when('/:username/assigned-tasks', {
templateUrl: 'app/partials/assigned-tasks.html',
controller: 'TaskController'
}).
when('/:username/accepted-tasks', {
templateUrl: 'app/partials/assigned-tasks.html',
controller: 'TaskController'
}).
otherwise({
redirectTo: '/'
});
}]);
这是我开始构建的任务控制器,然后意识到这不会起作用
TaskManager.controller('TaskController', ['$scope', 'AssignedTasksService', function($scope, AssignedTasksService)
{
$scope.tasks = [];
loadAssignedTasks();
function applyRemoteData( Tasks ) {
$scope.tasks = Tasks;
}
function loadAssignedTasks() {
AssignedTasksService.getAssignedTasks()
.then(
function( tasks ) {
applyRemoteData( tasks );
}
);
}
}]);
getAssignedTasks函数只是一个对api url运行http get请求并返回错误或api数据的函数
现在您可以看到分配的任务在遇到TaskController后会自动加载,这显然是一个问题,因为我还需要能够接受已接受的任务。现在我是否需要为接受的任务创建一个单独的控制器,或者有没有办法让我从控制器检查URL并从那里我可以决定是否要运行loadAssignedTasks函数或loadAcceptedTasks(我没有&#39) ; t创造了)。但它只会执行与loadAssignedTasks函数相同的操作,但是对于接受的任务
答案 0 :(得分:0)
正如评论中所提到的,有多种方法可以解决。全部取决于当前的用例。但是你应该使用单独的控制器来解决这个问题。还要将数据(任务)注入控制器,而不是在控制器内部取出它们。请考虑以下示例:
var resolveAssignedTasks = function(AssignedTasksService) {
return AssignedTasksService.getAssignedTasks();
};
var resolveAcceptedTasks = function(AcceptedTasksService) {
return AcceptedTasksService.getAcceptedTasks();
};
TaskManager.config(['$routeProvider',
function($routeProvider) {
$routeProvider.
when('/:username/assigned-tasks', {
templateUrl: 'app/partials/assigned-tasks.html',
controller: 'TaskController',
resolve: {
tasks: resolveAssignedTasks
}
}).
when('/:username/accepted-tasks', {
templateUrl: 'app/partials/assigned-tasks.html',
controller: 'TaskController',
resolve: {
tasks: resolveAssignedTasks
}
}).
otherwise({
redirectTo: '/'
});
}]);
控制器:
TaskManager.controller('AssignedTaskController', ['$scope', 'tasks', function($scope, tasks)
{
$scope.tasks = tasks;
}]);
TaskManager.controller('AcceptedTaskController', ['$scope', 'tasks', function($scope, tasks)
{
$scope.tasks = tasks;
}]);
您也可以通过将resolveFunctions合并到一个函数中来使用单个控制器,该函数根据当前路径返回相应的任务。希望这会有所帮助。