为什么当服务注入第二个控制器时,AngularJS 1.4.8 应用程序不起作用

Why does AngularJS 1.4.8 app not work when service is injected into second controller?

本文关键字:AngularJS 不起作用 应用程序 服务 注入 第二个 控制器 为什么      更新时间:2023-09-26

一个 AngularJS 应用程序成功地将服务(称为 auth(包含在一个控制器(称为secure(中,然后允许secure控制器处理的视图使用 auth.methodname() 语法与auth服务进行交互。

该应用程序使用AngularJS的1.4.8版本,并且每次都使用$cookies.get('keyname')语法正确编译,直到我尝试将auth注入第二个控制器(称为navigation(并从第二个(navigation(控制器处理的视图中调用其方法之一。

突然之间,

该应用程序无法编译,FireFox开发人员工具控制台表示$cookies.get is not a valid method。 然后在我将语法更改为$cookies['']之后(尽管该应用程序仍然使用 AngularJS 的 1.4.8 版(,$cookies.get错误消失了,并且出现了一个新错误,指出$interval is not a valid function似乎阻止了编译。 所有编译错误都指向auth模块,该模块的代码自错误出现之前就没有更改过。 我想知道问题是否在于将auth服务注入navigation控制器的方式。 需要对下面的代码进行哪些具体更改,以便navigation控制器和secure控制器都可以成功地重用auth服务?

以下是auth服务的相关部分,自新问题出现之前以来,它没有改变(除了将$cookies.get(''(更改为$cookies[''](:

angular
.module('auth', ['ngCookies'])
.service('auth', ['$rootScope', '$http', '$cookies', '$interval', function($rootScope, $http, $location, $cookies, $interval) {
    var $this = this;
    this.authenticated1 = $cookies['AUTH1'];
    //// other stuff
    $interval(function(){
        //stuff
    }
}

这是navigation控制器,它可能错误地注入了auth,因此可能导致问题

angular
.module('navigation', ['auth', 'ngRoute'])
.controller('navigation', function($scope, auth, $route) {
    $scope.auth = auth;
    // other stuff
}

这是secure控制器,它在更改之前工作正常,并且在错误出现之前没有更改:

angular
.module('secure', ['auth'])
.controller('secure', function($scope, auth, $routeParams) {
    $scope.auth = auth;
    // other stuff
}

控制器处理someview的调用代码确实navigation更改为包括对auth.logout()的调用,作为问题出现之前更改的一部分。 这是someview代码:

<div ng-controller="navigation" class="container">      
    <ul class="nav nav-pills" role="tablist"  >
        <li ng-class="{active:tab('home')}"><a href="/">Home</a></li>
        <li ng-class="{active:tab()}"><a ng-href='auth.logout()' ng-click='auth.logout()' >logout</a></li>
    </ul>
</div>

自问题出现之前,安全控制器处理someotherview调用代码未更改,但未更改的代码为:

<div ng-show="auth.authenticated1!='yes'">
    Show something in particular specified here.
</div>

这应该可以解决问题:

angular
.module('auth', ['ngCookies'])
.service('auth', ['$rootScope', '$http', '$location', '$cookies', '$interval', function($rootScope, $http, $location, $cookies, $interval) {

您错过了在函数参数中使用的$location声明。如果使用数组表示法进行参数注入,则函数参数必须匹配。