2016-06-22 17 views
0

Stackoverflowはこのタイトルの下で数多くの質問をしていますが、私はそれぞれのことを考えています。もっと重要なことは、これは私の唯一のサービスではなく、残りのサービスは機能します。AngularJSサービスが定義されていません。

マイサービス:

(function() { 

    var envService = function ($location) { 

     //Removed 

     return { 
      //Removed for SO, was simply an object of functions 

    } 

    var module = angular.module('passwordResetApp'); 
    module.factory('envService', ['$location', envService]); 
}()); 

マイapp.js:

(function() { 
    'use strict'; 

    var app = angular.module('passwordResetApp', ['ngRoute', 'AdalAngular', 'ui.grid', 'ui.grid.pagination', 'ui.grid.edit', 'ui.grid.cellNav', 'ui.grid.selection']); 

app 
    .config([ 
      '$routeProvider', '$httpProvider', 'adalAuthenticationServiceProvider', '$locationProvider', 
      function ($routeProvider, $httpProvider, adalProvider, $locationProvider) { 

       $routeProvider 
        .when('/home', 
         { 
          templateUrl: '/app/views/home.html', 
          caseInsensitiveMatch: true 
         }) 
        .when('/PasswordReset', 
         { 
          templateUrl: '/app/views/passwordReset.html', 
          controller: 'ResetRequestController as vm', 
          //requireAdLogin: true, 
          caseInsensitiveMatch: true 
         }) 
        .when('/UserSearch', 
         { 
          templateUrl: '/app/views/userSearch.html', 
          controller: 'UserSearchController as vm', 
          //requireAdLogin: true, 
          caseInsensitiveMatch: true 
         }) 
        .otherwise({ redirectTo: '/home' }); 

       adalProvider.init(
        { 
         instance: 'https://login.microsoftonline.com/', 
         tenant: 'Removed for SO', 
         clientId: 'Removed for SO', 
         requireADLogin: false, 
         //anonymousEndpoints: [ 
         // '/' 
         //], 
         //endpoints: [ 
         // '/' 
         //], 
         extraQueryParameter: 'nux=1', 
         cacheLocation: 'localStorage', 
         // enable this for IE, as sessionStorage does not work for localhost. 
        }, 
        $httpProvider 
       ); 

       $locationProvider.html5Mode(true).hashPrefix('!'); 

      } 
     ] 
    ); 

app.directive('header', 
    function() { 
     return { 
      //Attribute, not element 
      restrict: 'A', 
      replace: true, 
      templateUrl: 'app/views/_header.html', 
      controller: 'HeaderController as vm', 
      caseInsensitiveMatch: true 
     } 
    }); 

app.directive('footer', 
    function() { 
     return { 
      restrict: 'A', 
      replace: true, 
      templateUrl: 'app/views/_footer.html', 
      caseInsensitiveMatch: true 
     } 
    }); 

app.run([ 
    '$route', '$http', '$rootScope', '$location', 
    function ($route, $http, $rootScope) { 
     $http.defaults.withCredentials = true; 
     $rootScope.getUrlPath = function (url) { 
      return baseUrl + url; 
     }; 
    } 
]); 

}())。

やサービスを持ってしようと、コントローラが注入:

(function() { 
    'use strict'; 

    var app = angular.module('passwordResetApp'); 

    var headerController = function ($scope, $location, envService, adalService) { 
     var vm = this; 
     vm.currentUser = {}; 
     vm.environment = envService.getEnvironment(); 

     vm.changeView = function(view) { 
      $location.path(view); 
     }; 

     vm.login = function() { 
      adalService.login(); 
     }; 

     vm.logout = function() { 
      adalService.logOut(); 
     }; 
    }; 

    app.controller('HeaderController', ['adalAuthenticationService', headerController]); 


}()); 

答えて

1

あなたはコントローラ機能でそれらを使用するためには、DIのアレイ内のすべての依存関係を注入する必要があります。シーケンスが乱れることのないようにしてください。

app.controller('HeaderController', ['$scope', '$location', 'envService', 'adalService', headerController]); 
+0

これは絶対に修正しました。私はそれを受け入れるでしょうので、私は13分のタイマーを私にさせる。私は、私の他のカスタムサービスを使用している他のコントローラーでそれをやっていません。私の概念理解のために、 'app.controller()'メソッドで文字列名を指定せずにこれらのサービスを注入することができた理由を知っていますか? –

+1

実際に私の[最終回答](http://stackoverflow.com/a/37968899/2435473)で同様の質問を読み上げることができますが、あなたが望むものがまだ得られない場合は教えてください。ありがとう:) –

関連する問題