AngularJS模块加载卡住,TableContent控制器引入$http后其余get请求失效
问题根因
- 依赖注入不匹配:你声明的控制器依赖列表顺序为
['$http', '$scope', '$window'],但控制器函数的入参顺序为($scope, $window),既漏了$http的参数位,顺序也完全不对应。AngularJS 依赖注入严格按数组顺序匹配参数,导致代码中调用的$http实际是未定义值,执行$http.get时直接抛出未捕获异常,中断后续代码执行,同时也会阻塞同 Angular 上下文内的其他请求逻辑。 - 变量未声明:代码中
EditIndex、EditProjectID、EditProject、ProjectLength、PostData均未使用var/let/const声明,会自动挂载为全局变量,极易引发命名冲突,干扰其他业务逻辑。 - 取值逻辑错误:
$window.Project是项目数组,你将数组直接赋值给$scope.Project后取$scope.Project.ID,数组本身没有ID属性,会导致请求参数为undefined,请求路径异常。
修复方案
调整控制器参数顺序和数量与依赖列表一致,补全变量声明,修正删除请求的参数取值逻辑,修复后代码如下:
app.controller('TableContent', ['$http', '$scope', '$window', // 调整参数顺序和数量和依赖列表完全匹配 function ($http, $scope, $window) { console.log("I'm in TableContent"); $scope.EditSaverCommit = function () { console.log("I'm in EditSaverCommit"); // 补全变量声明 const EditIndex = $scope.$index; const EditProjectID = $scope.project.ID; console.log("Scope has"+$scope.project.Name); const EditProject = $scope.project.Name; console.log("EditProject has "+EditProject); }; $scope.DeleteProjectCommit = function () { console.log("I'm in DeleteProjectCommit"); $window.Project.splice($scope.$index, 1); let ProjectLength = $window.Project.length; let PostData = ""; $scope.Project = $window.Project; // 取当前行对应项目的ID,而非数组的ID PostData = $scope.project.ID; $http.get("https://localhost:44377/project/DeleteProject/"+PostData).then(function (response) { console.log("I'm in DeleteProject"); $window.Project = response.data; }); PostData = ""; console.log("I'm not in TableContent"); }; }]);
内容的提问来源于stack exchange,提问作者user199135
相关产品推荐
相关产品推荐

