Вызов службы AngularJS modalpopup Невозможно прочитать свойство undefined

У меня возникла проблема с Angular JS popup. Я отправляю данные из всплывающего окна и хочу передать данные в 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);
        //});
    };

});

Может кто-нибудь, пожалуйста, помогите / направьте меня, что здесь не так. Обратите внимание, что у меня есть другие вызовы методов, работающие нормально в той же службе и контроллере. Спасибо заранее Венкат.

2 ответа

Решение

Вам нужно разоблачить addTask метод в обслуживании. Сейчас это просто локальная переменная, к которой нельзя получить доступ извне. Когда служба построена, она должна создать соответствующий объект с необходимыми методами. Так что вы должны установить addTask либо с this.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

Код

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);
        });
    };
});

Надеюсь, это поможет вам. Благодарю.

Другие вопросы по тегам