如何设置我的angularjs控制器

时间:2014-10-18 05:13:56

标签: javascript angularjs api http frontend

我只是稍微改变了角度,我构建了一个简单的任务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函数相同的操作,但是对于接受的任务

1 个答案:

答案 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合并到一个函数中来使用单个控制器,该函数根据当前路径返回相应的任务。希望这会有所帮助。