59

現在 app.js には、次のルートがあります。

var gm = angular.module('gm', ['gm.services','gm.directives','gm.filters','gm.controllers','ngSanitize']);

gm.config(['$routeProvider', 'Path', function($routeProvider, Path) {

    $routeProvider.when('/login', { 
        templateUrl: Path.view('application/authentication/login.html'), 
        controller: 'authController' 
    });

    $routeProvider.when('/dashboard', { 
        templateUrl: Path.view('application/dashboard/index.html'), 
        controller: 'dashboardController' 
    }); 

    $routeProvider.otherwise({ 
        redirectTo: '/login'
    });

}]);

ご覧のとおり、パスの依存関係を挿入しようとしています。このプロバイダーが見つからないというエラーが表示されますが。これは、構成モジュールプロバイダーが何よりも先に実行されるためだと思います。以下は、「services.js」でのパスプロバイダーの定義です

gm.factory("Path", function() {
  return {
    view: function(path) {
      return 'app/views/' + path; 
    },
    css: function(path) {
      return 'app/views/' + path; 
    },
    font: function(path) {
      return 'app/views/' + path; 
    },
    img: function(path) {
      return 'app/views/' + path; 
    },
    js: function(path) {
      return 'app/views/' + path; 
    },
    vendor: function(path) {
      return 'app/views/' + path; 
    },
    base: function(path) {
      return '/' + path; 
    }
  }
}); 

このプロバイダーを構成モジュールに挿入するにはどうすればよいですか?

4

4 に答える 4

58

では.configプロバイダーのみを使用できます (例: $routeProvider)。では.run、サービスのインスタンスのみを使用できます (例: $route)。プロバイダーではなく、工場があります。これを作成する 3 つの方法でこのスニペットを参照してください: サービス、ファクトリ、およびプロバイダー 。角度ドキュメントhttps://docs.angularjs.org/guide/servicesでも​​これについて言及されています。

于 2013-07-05T10:25:41.553 に答える
14

そのためには定数を使用する必要があります。これは、プロバイダー以外の構成フェーズで挿入できる唯一のものだからです。

angular.module("yourModule").constant("paths", {
  base: function(){ ... }
});
于 2013-07-05T09:51:15.187 に答える
2

この議論は、基本的に同じことを理解しようとしていたときに役立ちました

$routeProvider.when('/', {
                templateUrl:'views/main.html',
                controller:'MainController',
                resolve: {
                    recentPosts: ['$q', 'backendService', function($q, backendService){
                        var deferred = $q.defer();
                        backendService.getRecentPosts().then(
                            function(data) {
                                var result = data.result;
                                deferred.resolve(result);
                            },
                            function(error) {
                                deferred.reject(error);
                            }
                        );
                        return deferred.promise;
                    }]
                }
            })
于 2014-12-15T23:46:33.467 に答える