AngularJS modalpopup 服务调用无法读取未定义的 属性
AngularJS modalpopup Service call Cannot read property of undefined
我遇到了 Angular JS 弹出窗口的问题。我正在从弹出窗口提交数据,我想将数据传递给 taskService,以便它可以调用 WebAPI 并存储到我的数据库中。
这是我从 BoardCtrl 调用来打开模式 window
$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 调用时
错误是 "Cannot read property 'addTask' of undefined"
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);
//});
};
});
有人可以帮助/指导我这里有什么问题吗?
请注意,我有其他方法调用在同一个服务和控制器中工作正常。
提前致谢
文卡特.
您需要在服务中公开 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
};
});
服务总是returns一个单例对象,可以在应用程序范围内使用。
您忘记在服务上下文中编写方法,
将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);
});
};
});
希望对您有所帮助。谢谢
我遇到了 Angular JS 弹出窗口的问题。我正在从弹出窗口提交数据,我想将数据传递给 taskService,以便它可以调用 WebAPI 并存储到我的数据库中。 这是我从 BoardCtrl 调用来打开模式 window
$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 调用时 错误是 "Cannot read property 'addTask' of undefined"
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);
//});
};
});
有人可以帮助/指导我这里有什么问题吗? 请注意,我有其他方法调用在同一个服务和控制器中工作正常。 提前致谢 文卡特.
您需要在服务中公开 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
};
});
服务总是returns一个单例对象,可以在应用程序范围内使用。 您忘记在服务上下文中编写方法,
将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);
});
};
});
希望对您有所帮助。谢谢