2013-08-20 71 views
2

我在我的路由提供程序中設置了一個簡單的解析函數。像Angular routeProvider Resolve not called

.config(['$routeProvider', 'Constants', function config($routeProvider, Constants) { 
    $routeProvider. 
     when('mypage', { 
      templateUrl: 'partials/mypage.tpl.html', 
      controller: 'MyPageCtrl', 
      reloadOnSearch: false, 
      resolve: { 
       factory: 'MyPageResolve' 
      } 
     }) 
)]; 

一些地方該工廠被宣佈爲模塊中是這樣的:

.factory('MyPageResolve', ['$q', '$log', 'someAPI', 
    function ($q, $log, someAPI) { 
     var defer = $q.defer(); 
     var postUserFunc = function() { 

      someAPI.get(
       function(data, status) { //$http.get().success() func 
        defer.resolve(); 
       } 
      ); 

     }; 
     return defer.promise; 
}]); 

發生了什麼事是直刷新或第一負載,這種解決方法被擊中。但是,如果我有$ location.url('/ mypage');從一個路由改變到這個,angular不會重新解析這個控制器。

我可能不會以正確的方式思考解決方案,如果是的話,會採取「角度」的方式來做到這一點。我希望在視圖之前加載所有這些信息,並且基於路由參數變量。

回答

3

結束我需要把這個工廠變成一個函數。一個工廠作爲一個單身人士,所以它只會運行一次。

所以我做了我廠的樣子:

var myPageResolve = ['$q', '$log', 'someAPI', 
function ($q, $log, someAPI) { 
    var defer = $q.defer(); 
    var postUserFunc = function() { 

     someAPI.get(
      function(data, status) { //$http.get().success() func 
       defer.resolve(); 
      } 
     ); 

    }; 
    return defer.promise; 
}]); 

而不是解決上'myPageResolve',我決定上myPageResolve。非常微妙的變化使所有的差異。