AngularJS modalpopup服务调用无法读取未定义的属性

AngularJS modalpopup服务调用无法读取未定义的属性,angularjs,modalpopup,Angularjs,Modalpopup,我对这个问题有意见。我正在从弹出窗口提交数据,我想将数据传递给taskService,以便它可以调用WebAPI并存储到我的数据库中。 这是我从BoardCtrl发出的打开模式窗口的呼叫 $scope.showAddTask = function () { modalService.showModal({ templateUrl: "Partials/AddTask.html", controller: "taskCtrl",

我对这个问题有意见。我正在从弹出窗口提交数据,我想将数据传递给taskService,以便它可以调用WebAPI并存储到我的数据库中。 这是我从BoardCtrl发出的打开模式窗口的呼叫

$scope.showAddTask = function () {
        modalService.showModal({
            templateUrl: "Partials/AddTask.html",
            controller: "taskCtrl",
            inputs: {
                title: "Add Task"
            }
        }).then(function (modal) {
            //debugger;
            modal.element.modal();
            modal.close.then(function (result) {
            });
        });
    };
现在,用户键入任务详细信息并提交。电话在我的taskCtrl中 调试器确实命中了下面的代码,我可以看到最终用户提交的值。我面临的问题是,我犯了一个错误 在taskService.addTask调用中 错误为无法读取未定义的属性“addTask”

    fpdApp.kanbanBoardApp.controller('taskCtrl', function ($scope, taskService) {

         $scope.close = function () {
                debugger;
                taskService.addTask($scope.Name, $scope.Desc, $scope.Estimate, 1).then(function (response) {
                    $scope.result = response.data;
                }, onError);
                close({
                    name: $scope.name,
                    Desc: $scope.Desc,
                    Estimate: $scope.Estimate,
                }, 500); // close, but give 500ms for bootstrap to animate
            };
});
这是我的任务服务

fpdApp.kanbanBoardApp.service('taskService', function ($http, $q, $rootScope) {

    var addTask = function (name, desc, estimate, projectId) {
        debugger;
        //return $http.get("/api/TaskWebApi/AddTaskForProject").then(function (response) {
        //    return response.data;
        //}, function (error) {   
        //    return $q.reject(error.Message);
        //});
    };

});
有人能帮我一下吗。 注意,在同一个服务和控制器中,我还有其他方法调用可以正常工作。 提前谢谢 Venkat.

您需要在服务中公开addTask方法。现在它只是一个无法从外部访问的局部变量。构建服务时,它应该使用必要的方法创建适当的对象。因此,您应该使用this.addTask=addTask或使用以下方法返回对象来设置addTask:

fpdApp.kanbanBoardApp.service('taskService', function ($http, $q, $rootScope) {

    var addTask = function (name, desc, estimate, projectId) {
        return $http.get("/api/TaskWebApi/AddTaskForProject").then(function (response) {
            return response.data;
        }, function (error) {   
            return $q.reject(error.Message);
        });
    };

    return {
        addTask: addTask
    };
});

服务总是返回一个单例对象,该对象可由应用程序范围使用。 您忘记在服务上下文中编写方法

将var addTask更改为this.addTask

代码


希望这能对你有所帮助。谢谢。

代码应该可以工作。请添加任务服务代码。任务服务代码在上面更新,谢谢。如果您要公开方法,那么它应该是factory。是的,但是它也可以与服务一起工作。但是你是对的,它应该是工厂。谢谢,伙计,我不小心忘了在我的控制器中添加addTask返回
fpdApp.kanbanBoardApp.service('taskService', function($http, $q, $rootScope) {

    this.addTask = function(name, desc, estimate, projectId) {
        return $http.get("/api/TaskWebApi/AddTaskForProject").then(function(response) {
            return response.data;
        }, function(error) {
            return $q.reject(error.Message);
        });
    };
});