gpt4 book ai didi

javascript - angularjs 未捕获错误 : Unknown provider:

转载 作者:数据小太阳 更新时间:2023-10-29 05:43:25 27 4
gpt4 key购买 nike

我需要一些帮助。我正在学习 Angularjs 并尝试创建服务。目前我正在尝试将他们模块中的所有内容分开。当我创建一个名为 (bac.route-manager) 的新模块并尝试将其作为 RouterService 注入(inject)应用程序配置时,我收到一个错误,我不明白其含义或如何修复它。我所有其他的东西似乎都有效,除了当我尝试添加这个模块时,这个未知的提供者只有在我尝试注入(inject)它之后才开始出现。请提供任何帮助。

我的错误

Uncaught Error: Unknown provider: RouterService from bac

我的 app.js 文件

angular.module('bac', [
'bac.route-manager'
])

.config( function bacAppConfig( $routeProvider, RouterService ) {

//I dont knwo if i can do this but right now it doesnt matter because of error
console.log(RouterService.getRoutes());
});

我的 route-manager.js 文件

angular.module('bac.route-manager', [])

.service('RouterService', function() {

this.getRoutes = function() {
return {
"/login": {
templateUrl: 'app/modules/login-manager/partials/login.tpl.html',
requiredLogin: false
},

"/dashboard": {
templateUrl: 'app/modules/dashboard-manager/partials/dashboard.tpl.html',
controller: 'DashboardController',
requiredLogin: true
}

};

};

});

我使用 grunt 生成 js 包含在我的 html 文件中,但为了简洁起见,这里看起来像删除了很多东西。

我的index.html

<html lang="en" class="no-js" ng-app="bac">
<body>
<ng-view></ng-view>

<script type="text/javascript" src="vendor/angular/angular.js"></script>
<script type="text/javascript" src="app/app.js"></script>
<script type="text/javascript" src="app/modules/dashboard-manager/dashboard-manager.js"></script>
<script type="text/javascript" src="app/modules/route-manager/route-manager.js"></script>

</body>
</html>

最佳答案

config阶段,声明的服务还不可用。只有使用provide声明的才会通过serviceNameProvider(在你定义的名称后加上Provider)。例如:

.provide('RouterService', function() {
var service = { };
var routes = {
"/login": {
templateUrl: 'app/modules/login-manager/partials/login.tpl.html',
requiredLogin: false
},
"/dashboard": {
templateUrl: 'app/modules/dashboard-manager/partials/dashboard.tpl.html',
controller: 'DashboardController',
requiredLogin: true
}};

service.getRoutes = function() { return routes; };

this.$get = function() { return service; }

this.setupRoute = function(data) { /* something here */ };
};

当你获得一个提供者时,定义在 this 上的所有方法都将可用。当你访问正常服务时,注入(inject)的是$get函数的返回。根据您的需要,您需要更改服务以使用 provide 或要求在 run 方法中注入(inject)服务:

angular.module('bac', ['bac.route-manager'])
.config(function ($routeProvider, RouterServiceProvider) {
// Here, only RouterServiceProvider.setupRoute will be available
}).run(function (RouterService) {
// Here, the service singleton return with the $get function will
// be injected
console.log(RouterService.getRoutes());
});

编辑

作为旁注,我相信即使您已将 RouterService 定义为 service,请求 RouterServiceProvider 仍然有效,但是不会出现任何方法,因为 service 本质上是 provider 的包装器,仅返回 $get

中的函数

关于javascript - angularjs 未捕获错误 : Unknown provider:,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18276189/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com