Webpack 捆绑导致未知提供者 $injector/unpr 错误

2023-12-21

未知提供商 - NavigationCtrl、Restangular

我目前正在处理我的旧项目,让它们再次完全工作,作为一个小的重构练习,我遇到了一些不再编译的 AngularJS 代码。我相信这取决于更新的依赖项,因为我至少 3 年没有更改此源代码的功能。

我遇到的问题是:

angular.js:15567 错误:[$injector:unpr] 未知提供者:AProvider https://errors.angularjs.org/1.7.8/$injector/unpr?p0=AProvider%20%3C-%20A%20%3C-%20NavigationCtrl

at angular.js:138
at angular.js:4924
at Object.getService [as get] (angular.js:5084)
at angular.js:4929
at getService (angular.js:5084)
at injectionArgs (angular.js:5109)
at Object.invoke (angular.js:5133)
at $controllerInit (angular.js:11704)
at nodeLinkFn (angular.js:10517)
at compositeLinkFn (angular.js:9832)

我理解这是一个注入问题。我正在尝试注入 Angular 不知道的东西。这有点令人困惑,因为我已经有一段时间没有使用 AngularJS 了(使用过 Angular 2+)。

My app.js文件看起来像这样:

angular.module('qaDashboard', ['restangular'])
    .run(['$anchorScroll', function ($anchorScroll) {
        $anchorScroll.yOffset = 85;   // always scroll by 50 extra pixels
    }]);

angular.module('qaDashboard').controller('NavigationCtrl', function ($scope, $location, $anchorScroll) {
    $scope.scrollTo = function (id) {
        $location.hash(id);
        $anchorScroll();
    };
});

// Environment
require('../components/environments/script.js');
require('../components/environments/style.scss');

// Feature
require('../components/features/script.js');
require('../components/features/style.scss');

// Day
require('../components/days/script.js');
require('../components/days/style.scss');

// Hour
require('../components/hours/script.js');

// Report Data (URL & JSON)
require('../components/report/script.js');
require('../components/report/style.scss');

// Index Style
require('../stylesheets/style.scss');

And my index.html看起来像这样:

<!DOCTYPE html>
<html ng-app="qaDashboard">

<head>
    <title>DASHBOARD</title>
    <script src="/node_modules/angular/angular.js"></script>
    <script src="/node_modules/lodash/lodash.js"></script>
    <script src="/node_modules/restangular/src/restangular.js"></script>
    <script src="/javascripts/app.bundle.js" type="text/javascript"></script>

<body>
    <div class="navbar">
        <p>Regression Test Dashboard</p>
        <div ng-controller="NavigationCtrl" class="navbarAlign">
            <a ng-click="scrollTo('Dev')" class="btn">Dev</a>
            <a ng-click="scrollTo('QA')" class="btn">QA</a>
            <a ng-click="scrollTo('Staging')" class="btn">Staging</a>
            <a ng-click="scrollTo('Staging_EMEA')" class="btn">Staging EMEA</a>
            <a ng-click="scrollTo('Production')" class="btn">Production</a>
            <a ng-click="scrollTo('Production_EMEA')" class="btn">Production EMEA</a>
            <!--<a class="btn">[Do stuff]</a>-->
        </div>
    </div>

    <environments>

    </environments>
</body>

</html>

我尝试过删除单个控制器,但没有成功。我在这里遗漏了一些明显的东西吗?自从我上次使用此代码以来,语法/ API 是否发生了很大变化?

The app,js文件被 webpack 捆绑- 不知道这是否是问题的根源。我知道这个代码以前运行得很好。我只是觉得我错过了一些微不足道的东西,而且事实证明它有点难以发现。

My package.json- 如果有帮助:

{
  "name": "dashboard",
  "version": "0.5.0",
  "private": true,
  "scripts": {
    "start": "node ./bin/www"
  },
  "dependencies": {
    "angular": "^1.7.8",
    "body-parser": "~1.19.0",
    "concat-map": "0.0.1",
    "convert-time": "^0.3.0",
    "cookie-parser": "~1.4.4",
    "dateformat": "^3.0.3",
    "debug": "~4.1.1",
    "express": "~4.17.1",
    "jenkins-api": "^0.3.1",
    "lodash": "^4.17.15",
    "morgan": "~1.9.1",
    "restangular": "^1.6.1",
    "serve-favicon": "~2.5.0"
  },
  "devDependencies": {
    "@babel/core": "^7.5.5",
    "acorn": "^6.2.0",
    "acorn-dynamic-import": "^4.0.0",
    "babel-core": "^6.26.3",
    "babel-loader": "^8.0.6",
    "css-loader": "^3.1.0",
    "file-loader": "^4.1.0",
    "html-loader": "^0.5.5",
    "node-sass": "^4.12.0",
    "promise": "^8.0.3",
    "sass-loader": "^7.1.0",
    "style-loader": "^0.23.1",
    "url-loader": "^2.1.0",
    "webpack": "^4.36.1"
  }
}

EDIT:

我试过这个:

angular.module('qaDashboard', ['restangular'])
    .controller('NavigationCtrl', function ($scope, $location, $anchorScroll) {
        $scope.scrollTo = function (id) {
            $location.hash(id);
            $anchorScroll();
        }
            .run(['$anchorScroll', function ($anchorScroll) {
                $anchorScroll.yOffset = 85;   // always scroll by 50 extra pixels
            }])
    });

没有运气。

Edit 2:

我刚刚使用以下代码尝试了 georgeawg 的响应:

angular.module('qaDashboard', ['restangular'])
    .controller('NavigationCtrl', ["$scope", "$location", "$anchorScroll",
        function ($scope, $location, $anchorScroll) {
            $scope.scrollTo = function (id) {
                $location.hash(id);
                $anchorScroll();
            }
        }]);

// Environment
require('../components/environments/script.js');
require('../components/environments/style.scss');

// Feature
require('../components/features/script.js');
require('../components/features/style.scss');

// Day
require('../components/days/script.js');
require('../components/days/style.scss');

// Hour
require('../components/hours/script.js');

// Report Data (URL & JSON)
require('../components/report/script.js');
require('../components/report/style.scss');

// Index Style
require('../stylesheets/style.scss');

我得到一个angular.js:15567 Error: [$injector:unpr] Unknown provider: AProvider <- A现在问题。

我的组件如下所示:

angular.module('qaDashboard').component('environments', {
    controller: function (Restangular) {
        this.$onInit = () => {
            Restangular.one('environments').get().then((response) => {
                this.environments = response.environments;
            });
        }
    },
    template: require('./template.html'),

}).filter('formattedEnvironment', () => {
    return (item) => {
        return item.replace('-', ' ')
                   .replace('_', ' ')
                   .replace('_', ' ')
                   .replace('_', ' ');
    }
});
<div id="{{environment}}" ng-repeat="environment in $ctrl.environments" class="borderedHolder">
    <h1>{{environment | formattedEnvironment}}</h1>
    <features environment='environment' >

    </features>
</div>

(有几个组件,它们都使用Restangular像上面那样^

编辑3:我已经尝试过:

with: angular.js:15567 Error: [$controller:ctrlreg] The controller with the name 'EnvironmentsController' is not registered.

angular.module('qaDashboard').component('environments', {
    controller: 'EnvironmentsController', ['Restangular', function (Restangular) {
        this.$onInit = () => {
            Restangular.one('environments').get().then((response) => {
                this.environments = response.environments;
            });
        }
    },
        template]: require('./template.html'),

})


Use 内联数组注释 https://docs.angularjs.org/guide/di#inline-array-annotation:

angular.module('qaDashboard', ['restangular'])
.controller('NavigationCtrl', ["$scope","$location","$anchorScroll",
  function($scope, $location, $anchorScroll) {
    $scope.scrollTo = function (id) {
        $location.hash(id);
        $anchorScroll();
    }
}]);

Update

为了帮助您在丑化之前发现此类问题,请使用严格依赖注入。

来自文档:

使用严格依赖注入

您可以添加一个ng-strict-di与相同元素上的指令ng-app选择严格 DI 模式:

<!doctype html>
<html ng-app="myApp" ng-strict-di>
<body>
  I can add: {{ 1 + 2 }}.
  <script src="angular.js"></script>
</body>
</html>

每当服务尝试使用隐式注释时,严格模式就会引发错误。

有关更多信息,请参阅

  • AngularJS 开发人员指南 - 严格依赖注入 https://docs.angularjs.org/guide/di#using-strict-dependency-injection
  • AngularJS ng-app 指令 API 参考 - 使用 ng-strict-di https://code.angularjs.org/1.7.8/docs/api/ng/directive/ngApp#with-ngstrictdi-

更新#2

Use 内联数组注释 https://docs.angularjs.org/guide/di#inline-array-annotation:

请您根据我的编辑 3 向我展示一下吗?

app.component('environments', {
    ̶c̶o̶n̶t̶r̶o̶l̶l̶e̶r̶:̶ ̶f̶u̶n̶c̶t̶i̶o̶n̶(̶R̶e̶s̶t̶a̶n̶g̶u̶l̶a̶r̶)̶ ̶{̶
    controller: ["Restangular", function(Restangular) {
        this.$onInit = () => {
            Restangular.one('environments').get().then((response) => {
                this.environments = response.environments;
            });
        }
    ̶}̶,̶
    }],
    template: require('./template.html'),    
})

来自文档:

隐式注释

Careful:如果您打算minify http://en.wikipedia.org/wiki/Minification_(programming)您的代码、您的服务名称将被重命名并破坏您的应用程序。

有关更多信息,请参阅

  • AngularJS 开发人员指南 - 隐式注释 https://docs.angularjs.org/guide/di#implicit-annotation
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Webpack 捆绑导致未知提供者 $injector/unpr 错误 的相关文章

随机推荐

  • 如何在 Ruby on Rails 视图中路由子文件夹?

    谁能告诉我如何路由子文件夹的 html erb 文件吗 其放置方式如下 view pages en index html erb 为了路由这个我正在route rb上做以下事情 match lang index to gt pages en
  • Oracle-创建临时结果集以在查询中使用

    如何创建临时结果集以在 SQL 中使用 而无需创建表和插入数据 示例 我有一个列表 例如 10 个代码 我想将其放入查询中 然后查询数据库以查看表中不存在此临时列表中的哪些代码 如果它已经在表中 我可以这样做 SELECT ITEM COD
  • 调用显示 ProgressDialog 的新 Activity 后隐藏键盘

    我在使用屏幕键盘时遇到问题 我有一个活动EditText它显示键盘和用于转到第二个活动的按钮 第二个活动显示ProgressDialog on its onCreate 执行某些操作 然后忽略ProgressDialog 问题是 虽然Pro
  • Web 缓存策略? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 在决定何时以及如何缓存时 您会考虑哪些关注点 流程和问题 难道总是没有赢的局面吗 这假定您使用的是经过优化的代码库 我最近一直在使用 DotNe
  • 反序列化包含不同类型对象的 JSON 数组

    所以我有一个如下所示的 JSON name customer properties name id type int value 32 name name type string value John 目前我正在反序列化到这组结构 deri
  • ssh 服务器连接到主机 xxx 端口 22:linux-ubuntu 上的连接超时 [关闭]

    Closed 这个问题是与编程或软件开发无关 help closed questions 目前不接受答案 我正在尝试通过 ssh 连接到远程服务器 但连接超时 我运行了以下命令 ssh 电子邮件受保护 cdn cgi l email pro
  • 使用 QVariantAnimation 显示图像列表

    我在使用 QVariantAnimation 时遇到一些问题 我一直在寻找如何使用它 但我只是不明白该怎么做 我读到的文档和示例让我更加困惑 我有一个 png 图像列表 我希望它们在一定时间内从 A 点移动到 B 点并根据我定义的步骤更改图
  • Python请求以字符串形式发送证书[重复]

    这个问题在这里已经有答案了 我似乎无法让握手正常工作 cert path to cert file pem url https example com api requests get url cert cert verify True 当
  • 从 Docker 容器中的 maven Quarkus 项目上的资源文件夹中读取 txt 文件

    我有一个项目来解析一个大文件中的一些信息 The project uses maven and java 结构如下 当我从 IDEA 运行应用程序时 我可以使用以下命令读取该文件 public void buffer throws IOEx
  • 404 在 Laravel 8 中未找到

    我正在创建一个简单的网站Laravel在运行网站时遇到了问题404 NOT FOUND Laravel 8 当我点击时索引页面正在工作about us and 联系我们页面出现错误404 NOT FOUND我不知道这是为什么 到目前为止我尝
  • 如何将数据从 Firebase 检索到 ListView(使用自定义数组适配器)

    我目前设计了一个地点浏览器应用程序 其中在列表视图中显示 3 个项目 当用户登录时 他会找到一个类别列表 单击某个类别后 将显示该类别下的地点列表 我已将该应用程序与 Firebase 关联 现在 我想显示 2 项 placeTitle a
  • 匹配括号内的特定单词

    我需要匹配并替换括号之间的特定单词 包括括号 像这样的东西 xxx xxxxSPECIFICWORDxxxxxxxxxxx xxx 我需要更换这个 xxxxSPECIFICWORDxxxxxxxxxxx 我的文字看起来像这样 xx xxxx
  • 从远处看时,ThreeJS 纹理是像素化的

    我正在使用 webGL 和 ThreeJS 然后我遇到了以下问题 从远处看时 具有大图像的纹理会出现像素化 检查示例 http jsfiddle net 4qTR3 1 http jsfiddle net 4qTR3 1 下面是代码 var
  • 有没有为C#实现的图数据结构

    我试图找到一种在 C 中重用的图形数据结构 但没有成功 当然 我可以借用数据结构书籍 但我希望它更具商业实用性 如果您能告诉我实现图的最佳方法是什么 我将不胜感激 谢谢 快速图表 https github com YaccConstruct
  • GNU emacs 相当于 func-menu

    GNU emacs 是否有等效的 func menu 当我可以访问 xemacs 时 我使用了 func menu 并且与 speedbar 或 sr speedbar 相比 我更喜欢它的行为 具体来说 我喜欢只显示当前文件的功能 功能列表
  • 在程序包管理器控制台窗口中进入\退出 PowerShell 模式

    我想我不小心进入了 PowerShell 模式 所以目前我的控制台显示 PS gt c dev 我想知道如何退出 PS gt 模式并返回 PM 模式 我希望控制台窗口显示 PM gt 以便我可以安装软件包 这样的事情我也经历过 我尝试重新启
  • Spark的Column.isin函数不接受List

    我正在尝试从 Spark Dataframe 中过滤掉行 val sequence Seq 1 2 3 4 5 df filter df column isin sequence 不幸的是 我收到不支持的文字类型错误 java lang R
  • 在 python 中打印混淆矩阵的精度

    这是我的代码 from sklearn metrics import confusion matrix cm confusion matrix y test y pred 这就是我得到的 0 1 0 102 39 1 73 29 我怎样才能
  • IE10、IE11 中的跨浏览器 css 渐变

    我在所有浏览器中为深色按钮做了渐变 看起来不错 除了 IE10 IE11 版本 顶部和底部有浅色条纹 我通过 colorzilla 渐变编辑器生成渐变 链接到按钮 http buttons selcet com ua HTML div cl
  • Webpack 捆绑导致未知提供者 $injector/unpr 错误

    未知提供商 NavigationCtrl Restangular 我目前正在处理我的旧项目 让它们再次完全工作 作为一个小的重构练习 我遇到了一些不再编译的 AngularJS 代码 我相信这取决于更新的依赖项 因为我至少 3 年没有更改此