【问题标题】:Is it possible to call a particular function from controller in angularjs?是否可以从 angularjs 中的控制器调用特定函数?
【发布时间】:2016-04-01 01:33:53
【问题描述】:

我是 MEAN 堆栈开发的初学者,正在做一个 Todo 应用程序,其中我正在创建任务表,然后使用 angularjs 将待办事项存储在该特定任务表中。

最初,我只是检索所有待办事项,而不考虑它属于哪个任务表以及在运行中创建待办事项。现在我想增强它以仅检索该特定任务表的待办事项。由于我想要动态加载它,因此我使用值为 '/: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"
    }) 

所有待办事项:

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

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

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

【问题讨论】:

  • 两者都是可能的,您可以创建两个不同的路由 'tasks/all' 和 'tasks/:taskId' 或定义一个路由 tasks/:ID 并传递实际的 Id 或 'All' 作为参数和像现在一样执行 IF/ELSE。
  • 另外,您不需要执行$scope.todos.push(data[i]);,只需执行$scope.todos = data;即可完全跳过for循环
  • 是的,tasks/all 和 tasks/:taskId 是可能的,甚至我也在做一些事情。但是如何调用那些特定的函数呢?这会将它们放到控制器中,但是函数呢?
  • 你可以在 $routeParams.taskId 上执行 if/else,如果 taskId=='All' 获取所有结果,否则如果 taskId!='All' 然后按 id 获取。
  • 也请回答我的第二个问题。

标签: javascript jquery angularjs node.js


【解决方案1】:

如果您想在控制器和模板中的任何位置调用这些函数,您可以将它们归因于 $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));
}

【讨论】:

    猜你喜欢
    • 2014-12-31
    • 1970-01-01
    • 2015-05-07
    • 1970-01-01
    • 2014-01-04
    • 2021-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多