【问题标题】:Error: $injector:unpr Unknown Provider when try delete a record错误:尝试删除记录时 $injector:unpr 未知提供者
【发布时间】:2017-06-05 23:22:41
【问题描述】:

我将使用 Angular js 1.3.13 删除我的 asp.net mvc 项目中的一条记录。

 <tr ng-repeat="emp in employees track by $index">
            <td>
                <a href="#" class="btn btn-default btn-sm">
                    <i class="glyphicon glyphicon-edit"></i>
                </a>
            </td>
            <td>
                {{emp.EmployeeId}}
            </td>
            <td>
                {{emp.EmployeeName}}
            </td>
            <td>
                {{emp.Address}}
            </td>
            <td>
                {{emp.EmailId}}
            </td>
            <td>
                <a href="#" 
                   ng-click="delFn($index)"
                   class="btn btn-default btn-sm">
                    <i class="glyphicon glyphicon-trash"></i>
                </a>
            </td>
        </tr>

我的 controller.js 代码

app.controller("EmpCtrl", function ($scope, EmployeeService) {

GetAllEmployee();

function GetAllEmployee() {

    var getAllEmployee = EmployeeService.getEmployee();
    getAllEmployee.then(function (emp) {
        $scope.employees = emp.data;
    }, function () {
        alert('Data not found');
    });
}
    $scope.delFn = function (index) {
        var response = confirm('Delete this Employee?');
        if (response) {
           $scope.employees.splice(index, 1);
           EmployeeService.deleteEmployee(index);
        }
     }
});

在我的 service.js 中,我有

    app.service("EmployeeService", function ($http,id) {
    this.getEmployee = function () {
        return $http.get("/Employee/GetAllEmployee");
    };

    this.deleteEmployee = function () {
        var url = "/Employee/DeleteEmployee/" + id;
        $http.delete(url)
            .success(function (result) {
                alert("Delete Successfully");
            })
            .error(function () {
                alert("Something wrong!");
            })
            .then(function () {
                window.location = '#/';
            })
    }
});

在我的 asp.net 控制器中,我有删除方法

 [HttpDelete]
    public void DeleteEmployee(int id)
    {
       // blah
    }

但是在 chrome 中调试时出现错误。

angular.min.js:102 错误:[$injector:unpr] http://errors.angularjs.org/1.3.13/$injector/unpr?p0=idProvider%20%3C-%20id%20%3C-%20EmployeeService

那你能告诉我哪里出了问题吗?

【问题讨论】:

  • 你能检查一下 index.html 中是否有 service.js 路径吗?该错误通常表明您没有将文件路径放在脚本标记中
  • @OlegMarkoff,我在_Layout.cshtml 中有路径。所以它应该在那里。

标签: javascript asp.net angularjs


【解决方案1】:

id参数从服务构造函数移到deleteEmployee函数:

    //REMOVE `id` argument
    //app.service("EmployeeService", function ($http,id) {
    app.service("EmployeeService", function ($http) {
    this.getEmployee = function () {
        return $http.get("/Employee/GetAllEmployee");
    };

    //ADD `id` here
    //this.deleteEmployee = function () {
    this.deleteEmployee = function (id) {
        var url = "/Employee/DeleteEmployee" + id;
        return $http.delete(url)
            .then(function (response) {
                alert("Delete Successfully");
                return response;
            })
            .catch(function (errorResponse) {
                alert("Something wrong!");
                throw errorResponse;
            })
            .then(function () {
                window.location = '#/';
            })
    }
});

来自error message link

Unknown provider: idProvider <- id <- EmployeeService

注入器错误地尝试注入名为id的服务。

【讨论】:

  • 但是在我的controller.js中,我必须传入id。EmployeeService.deleteEmployee(index)。如果在函数内部移动 id,id 始终为 0。
  • @Bigeyes “id 始终为 0”是什么意思?你可以像ng-click="delFn($index, emp.EmployeeId)"一样传递id,在controller.js中,方法应该像$scope.delFn = function (index, id) { ... }这样你可以在里面调用EmployeeService.deleteEmployee(id);
  • @StanislavKvitash,调试信息请见here
  • @Bigeyes 你的$scope.delFn 仍然只使用$index 作为参数,但我建议你也传递员工ID。
  • @Bigeyes 看看这个jsfiddle 并看到通过调用ng-click="delFn($index, emp.EmployeeId)" 将id 从视图传递到控制器的方法。
【解决方案2】:
app.controller("EmpCtrl", ['$scope', 'EmployeeService', function ($scope, EmployeeService) {
//do stuff here
}]);

根据角度文档,您的服务注入未正确完成。尝试将控制器更改为上述,看看错误是否消失了

【讨论】:

  • 我检查了每一行,错误表明 EmployeeService 在某处拼写错误,但我找不到拼写错误的位置。
猜你喜欢
  • 2017-04-25
  • 1970-01-01
  • 2017-01-23
  • 1970-01-01
  • 2015-01-25
  • 2016-03-26
  • 2014-07-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多