【发布时间】:2014-10-18 05:13:56
【问题描述】:
我只是稍微弄乱了一些角度,我构建了一个简单的任务 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(我没有尚未创建)。但它只会做与 loadAssignedTasks 函数相同的事情,但对于接受的任务
【问题讨论】:
-
您可以将您的
$routeProvider注入控制器并检查那里的网址。或者为不同的路由注入不同的服务。 -
@akonsu 并从那里运行一个 if 语句来决定运行什么函数?
-
好吧,如果你注入
$routeProvider,那么是的,如果你为不同的路由注入不同的服务,你可以让它们有相同的方法,然后调用这个方法。 -
有很多方法可以解决这个问题,但理想情况下,您应该将整个应用程序(或模块)视为一个 TaskManager,并将其所有控制器视为它的子组件。因此,我建议不要为整个模块使用一个超级控制器,而是使用多个控制器(在您的示例中为两个)。
-
嗯,我不是已经给出了一些提示吗.....
标签: javascript angularjs api http frontend