2013-05-22 73 views
4

以下代碼包含在我的'app.js'文件中,並在我的配置文件中用於配置$navigationProvider.doSomething()。 Test1和Test3被警告,但是我不能得到我的。$ get方法工作(任何Test2警報)。在我看來,它應該被稱爲我的網頁的初始化,對吧?

//providers.js

angular.module('myapp.providers', []).provider('$navigation', function() { 
    var routes = {}; 

    function test() { 
     alert(arguments); 
    }; 

    alert('Test1'); 

    this.$get = ['$rootScope', '$location', 
     function($rootScope, $location) { 
      $rootScope.$on('$locationChangeSuccess', function() { 
       alert('Test2'); 
      }); 

      alert('Test2'); 

      return {}; 
     }]; 

    this.doSomething = function() {alert('Test3')}; 
}); 

//app.js

var app = angular.module('myapp', [ 
     'myapp.providers' 
    ]).config(function ($locationProvider, $navigationProvider) { 
     $navigationProvider.doSomething(); 
     $locationProvider.html5Mode(true); 
    }); 

編輯:

我能夠得到它通過添加.run(['$navigation'], function ($navigationProvider) {})塊到我的「MYAPP工作。提供者的模塊。爲了更詳細地說明我的問題,爲什麼沒有自動初始化發生(因爲我在app.js中配置提供程序)?有沒有其他解決方案讓我的提供者初始化?一個空的module.run() - 塊對我來說似乎有點愚蠢!

回答

0

你很大程度上回答你自己的問題。配置應該在配置時發生,並在運行時實例化。否則配置階段的價值是什麼?