【问题标题】:How to inject angular services correctly如何正确注入角度服务
【发布时间】:2014-08-09 03:26:37
【问题描述】:

我创建了一个名为notifier 的服务,它使用toastr 在用户登录过程中提醒用户是否成功登录。

这是我的登录模块:

var login = angular.module('login',[]);

    login.controller('mvLoginCtrl', function($scope, $http){
        $scope.signin = function(username, passowrd){
            $http.post('/login', {username:username, passowrd:passowrd}).then(function(response){
                if(response.data.success){
                    mvNotifier.notify('You have successfully signed in!');
                }else{
                    mvNotifier.notify('Username/Password combination incorrect');
                }
            })
        }
    })

直到这里我没有遇到任何错误,但是当我尝试登录时,我得到了这个明显的错误:

ReferenceError: mvNotifier 未定义

我在第 2 行更改了我的登录模块,包括所需的依赖项:

login.controller('mvLoginCtrl', function($scope, $http, mvNotifier) 

但后来我得到了不同的错误

错误:[$injector:unpr] http://errors.angularjs.org/1.2.20/$injector/unpr?p0=mvIdentityProvider%20%3C-%20mvIdentity

我想问我收到此错误的原因是什么以及如何解决它。 这是我的 mvNotifier 模块代码:

var notifier = angular.module('notifier', []);

    notifier.value('mvToastr', toastr);
    notifier.factory('mvNotifier', function(myToastr){
        return{
            notify: function(msg){
                mvToastr.success(msg);
                console.log(msg);
            }
        }
    })

谢谢。

【问题讨论】:

    标签: javascript node.js angularjs toastr


    【解决方案1】:

    你需要像这样注入 myNotifier:

    var login = angular.module('login',['notifier']);
    
        login.controller('mvLoginCtrl', ['$scope','$http','mvNotifier',function($scope, $http,mvNotifier){
            $scope.signin = function(username, passowrd){
                $http.post('/login', {username:username, passowrd:passowrd}).then(function(response){
                    if(response.data.success){
                        mvNotifier.notify('You have successfully signed in!');
                    }else{
                        mvNotifier.notify('Username/Password combination incorrect');
                    }
                })
            }
        }])
    

    更多关于Dependency Injection

    【讨论】:

    • 谢谢你,我厌倦了这两种解决方案,仍然得到同样的错误
    • 您好,我已经在依赖链中使用正确的服务名称更新了答案,您将其命名为通知程序,并且我之前有 myNotifier
    • 我确实注意到了这一点并且我写得正确我什至改变了你的解决方案函数参数通知器而不是 myNotifier 但仍然是同样的错误
    • 谢谢你,但我的 app.js 仍然出现同样的错误,也许它有帮助: var myapp= angular.module('myapp',['ngResource','ngRoute','主','登录']); myapp.config(function($routeProvider,$locationProvider){ $locationProvider.html5Mode(true); $routeProvider .when('/',{templateUrl: '/partials/main/main', contorller: 'mvMainCtrl'}) } );
    • 您好,我只是想添加此评论,以防万一有人遇到同样的问题,通过对服务名称进行几次更改,答案是正确的,但我仍然有与通知服务相同的问题,这是有原因的我仍然不知道,但它适用于其他服务
    【解决方案2】:

    您需要在登录模块中添加通知模块作为依赖项。

    var login = angular.module('login',["notifier"]);
    

    那么这应该可以工作。

    login.controller('mvLoginCtrl', function($scope, $http, mvNotifier) 
    

    编辑: DEMO

    【讨论】:

    • 看看演示。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-04
    • 2020-01-03
    • 2019-01-11
    • 2017-01-26
    • 1970-01-01
    • 1970-01-01
    • 2015-04-12
    相关资源
    最近更新 更多