2014-10-18 20 views
0

我只是将角度搞乱了一点,我构建了一个简单的任务API。这个api分配并接受了任务。现在构建的应用程序时,我有以下途径:我该如何设置我的angularjs控制器

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功能可按仅仅是一个函数,运行一个HTTP获取请求的API网址,并返回和错误或API数据

现在,你可以看到分配的任务自动加载一旦它击中TaskController这显然是一个问题,因为我需要也能得到接受d任务。现在,我是否需要为接受的任务创建一个单独的控制器,或者有没有办法让我从控制器中检查url,然后从中决定是否要运行loadAssignedTasks函数或loadAcceptedTasks(我没有创建尚未)。但它只会执行与loadAssignedTasks函数相同的操作,但对于接受的任务

+0

你可以将'$ routeProvider'注入控制器并检查那里的url。或为不同的路线注入不同的服务。 – akonsu 2014-10-18 05:31:46

+0

@akonsu并从那里运行if语句来决定运行哪个函数? – Rodrigo 2014-10-18 05:33:12

+0

好吧,如果你注入'$ routeProvider',那么是的,如果你为不同的路由注入不同的服务,你可以让它们有相同的方法,只需调用这个方法。 – akonsu 2014-10-18 05:40:27

回答

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成返回根据当前路由上的相应任务之一函数中使用单个控制器。希望这可以帮助。