2016-03-02 60 views
0

我已經UI路由器與嵌套的決心是這樣的:UI路由器 - 通過承諾結果嵌套決心

$stateProvider 
     .state('route', { 
      url: '/route', 
      templateUrl: 'mypage.aspx', 
      resolve: { 
       getjson: function (readJson,$http) { 
        var readjsonget = $http.get('files.json'); 
        readjsonget.then(function (result) { 
         return result.data;        
        }, function (ex) { 
         console.log('GET error', ex); 
        });       
       }, 
       load: function ($q, filesInject, getjson) { 
        files = getjson; 
        $log.info(2); 
        return $q.all(files.map(filesInject.inject)); 
       } 
      } 
     }) 

我讀了JSON和我要傳遞的內容,第二決心功能。

我已經嘗試了很多方法,但總是在第二個函數後觸發promise。

我該如何解決這個問題?

+0

什麼是做到這一點的最好方法是什麼? – lpernice

+0

例如:將此移動到服務 – Grundy

回答

0

添加對promise的返回readjsonget。

$stateProvider 
    .state('route', { 
     url: '/route', 
     templateUrl: 'mypage.aspx', 
     resolve: { 
      getjson: function (readJson, $http) { 
       var readjsonget = $http.get('files.json'); 
       return readjsonget.then(function (result) { 
        return result.data;        
       }, function (ex) { 
        console.log('GET error', ex); 
       });       
      }, 
      load: function ($q, filesInject, getjson) { 
       files = getjson; 
       $log.info(2); 
       return $q.all(files.map(filesInject.inject)); 
      } 
     } 
    }) 
+0

對不起,我不明白...我已經在readjsonget返回.. – lpernice

+0

*** return *** readjsonget.then(function(result){....} –

+0

@lpernice示例https://plnkr.co/edit/EZqlOZD0eKQejCZwMXxu –

0

怎麼是這樣的:

$stateProvider 
    .state('route', { 
     url: '/route', 
     templateUrl: 'mypage.aspx', 
     resolve: { 
      getjson: function (readJson,$http) { 
       var deferred = $q.defer(); 
       var readjsonget = $http.get('files.json'); 
       readjsonget.then(function (result) { 
        deferred.resolve(result);   
       }, function (ex) { 
        deferred.reject(ex); 
       });   
       return deferred.promise;    
      }, 
      load: function ($q, filesInject, getjson) { 
       var deferred = $q.defer(); 
       files = getjson; 
       $log.info(2); 
       files.then(function(data){ 
        deferred.resolve(data.map(mapFunction)); 
       }, function(error){ 
        deferred.reject(error); 
       }); 
       return deferred.promise; 
      } 
     } 
    })