是否可以在angularjs中从控制器调用特定函数?

时间:2015-12-26 15:09:27

标签: javascript jquery angularjs node.js

我是MEAN堆栈开发的初学者,并做了Todo应用程序,其中我创建了任务表,然后使用angularjs将todo存储在该特定任务表中。

最初,我只是检索所有待办事项而不考虑它属于哪个任务表以及创建待办事项。现在我想要增强它以仅检索特定任务表的待办事项。由于我动态地想加载它,我使用值为'/:TaskID'的routeProvider,其中TaskID正在改变。因此,如果TaskID存在,我使用函数,否则检索所有内容。

这样的事情:

if($routeParams.TaskID) {
        var id = $routeParams.TaskID;
        Todos.getTodosForId(id)
            .success(function(data) {
                $scope.loading = false;
                $scope.formData = {}; // clear the form so our user is ready to enter another
                $scope.todos = data;  // assign our new list of todos
            }); 
    } else {

    // GET=====================================================================
    // when landing on the page, get all todos and show them
    // use the service to get all the todos
    Todos.get()
        .success(function(data) {
            for(var i = 0; i < data.length; i++) {
                $scope.todos.push(data[i]);
            }
            $scope.loading = false;
        });
    }   

而不是使用if-else,是否可以让它们保持独立?就像我想让它们都可以用来消除这种情况。可以在这里调用方法: 对于特定的TaskID:

.when('/:TaskID', 
    {
        templateUrl: "app.html",
        controller: "mainController"
    }) 

适用于所有Todos:

.when('/', 
    {
        templateUrl: "app.html",
        controller: "mainController"
    }) 

另一个问题是,如何在创建任务表时仅为该特定任务表显示待办事项?

如图所示,我的页面显示所有待办事项,而不是尚未创建的待办事项。因此,它应该最初显示No Todos,而不是显示所有待办事项。一旦我开始添加待办事项,我应该只看到该任务表下的那些待办事项。我有点困惑,我应该如何实现呢?

1 个答案:

答案 0 :(得分:0)

如果您想在控制器和模板中的任何位置调用这些功能,可以将它们归属于$scope变量,如下所示:

$scope.cleanForm = function(data) {
    $scope.loading = false;
    $scope.formData = {};
    $scope.todos = data;
};

$scope.loadForm = function(data) {
    $scope.todos = data;
    $scope.loading = false;
};

if($routeParams.TaskID) {
    var id = $routeParams.TaskID;
    Todos.getTodosForId(id).success($scope.cleanForm(data)); 
} else {
    Todos.get().success($scope.loadForm(data));
}