Skip to main content
 首页 » 编程设计

c#之AngularJs 脚本在部署后不起作用,它给出错误 [$injector :unpr]

2024年04月12日28wayfarer

我一直在构建一个 Web 项目,有时我会尝试发布并看到一切看起来都像在本地主机上所做的那样。这一次,我添加了 angularjs 来获取/显示货币并再次部署了项目。但是,它会在浏览器中向用户显示 {{currencies}}。

Error: [$injector:unpr] http://errors.angularjs.org/1.5.8/$injector/unpr?p0=nProvider%20%3C-%20n%20%3C-%20CurrencyController 

我的 angularjs 代码看起来像这样......

app.controller("CurrencyController", function ($scope, $http) { 
        $http.get('http://dummy.com/api/getcurrencyformainscreen'). 
                success(function (data, status, headers, config) { 
                    $scope.currencies = data; 
                }). 
                error(function (data, status, headers, config) { 
                    //alert(data); 
                }) 
 
}); 

我做错了什么?

请您参考如下方法:

如果在部署项目时 JavaScript 文件被缩小并且 AngularJS 服务未正确“注入(inject)”,则可能会发生这种情况。如果是这样,请尝试像这样修改您的代码:

var currencyCtrl = function($scope, $http) { 
  $http.get('http://dummy.com/api/getcurrencyformainscreen'). 
  success(function(data, status, headers, config) { 
    $scope.currencies = data; 
  }). 
  error(function(data, status, headers, config) { 
    //alert(data); 
  }) 
 
}; 
// inject dependencies properly for minification process 
currencyCtrl.$inject['$scope', '$http']; 
 
app.controller("CurrencyController", currencyCtrl); 

这是因为 AngularJS 依赖于依赖注入(inject)。在开发模式下,参数 ($scope, $http) 具有相同的名称并且 AngularJS 注入(inject)依赖项(具有相同名称的服务)没有问题,但在缩小版本中在 JavaScript 文件中,参数的名称是随机更改的,因此您必须使用 currencyCtrl.$inject['$scope', '$http'];手动注入(inject)它们;代码。