2015-12-08 17 views
1

我有以下的在我的應用程序代碼(剝離出來沒有用的代碼,所以可能有錯別字)Angularjs力的決心數據

基本上我需要確保$scope.takeovers有數據在執行任何其他代碼之前。

當瀏覽器監控網絡活動,我可以看到/api/pagedata被稱爲beeing併成功輸出我想在$scope

然而$scope.takeovers未定義總是數據。

目前我有這個不工作。

app.js

var app = angular.module('app', ['ui.router']); 

app.config(function($stateProvider, $urlRouterProvider) { 
    $urlRouterProvider.otherwise('/'); 

    $stateProvider 
    .state('index', { 
     url : '/', 
     resolve: { 
      takeovers: function(pageSetup) { 
       return pageSetup.getData().$promise; 
      } 
     }, 
     controller: 'newFormController', 
     templateUrl: '/templates/form.html' 
    }) 
}); 

app.controller('newFormController', ['$scope', 'takeovers', function($scope, takeovers) { 

    $scope.takeovers = takeovers.data; //Is empty when controller is initiated... 

    /* continue with code that rely on $scope.takeovers */ 


}]); 

app.factory('pageSetup', ['$http', function($http) { 
    var res = { 
    getData: function() { 
     var promise = $http({ 
     method: 'GET', 
     url: '/api/pagedata' 
     }); 
     promise.success(function(data, status, headers, conf) { 
     return data; 
     }); 
     return promise; 
    } 
    } 
    return res; 
}]); 

/API/pagedata結果

["2015-11-01","2015-11-02","2015-11-03","2015-11-08","2015-11-09","2015-11-10","2015-11-11","2015-11-15","2015-11-16","2015-11-29","2015-11-30"] 

我缺少什麼?

+0

解決方案是確保在實例化控制器之前解決所有數據。看着你的代碼,我的猜測是在接管中沒有現場數據,因爲接管本身就是你的數據。 $ scope.takeovers = takeovers;應該就夠了。 – skubski

+0

$ promise從哪裏來?有沒有這樣的屬性 – Avi

回答

4

我認爲return pageSetup.getData().$promise;的最後部分是你的問題。 getData已經返回一個promise,所以你需要做的就是直接返回它。

return pageSetup.getData(); 

您也可以直接在您的解析函數中解析promise並返回它的結果。我不認爲這實際上改變了簡單情況下的任何事情,但它可以讓您在發送給控制器之前操縱結果或獲取其中的特定部分。所以沿線的東西:

resolve: { 
    takeovers: function(pageSetup) { 
     pageSetup.getData().then(function(response) { 
      return response.data; 
     }); 
    } 
} 
+0

感謝您的意見。我已經嘗試過,但它不起作用。當我console.log「takeovers」時,它會輸出一些有很多奇怪屬性的對象。在擴展它之前,它說'對象{默認:對象,版本:「10.0.2」}' – David

+0

即使有第二個版本?我認爲一個決心本身就可以解決承諾,但是如果你明確地做到這一點,那麼我就不會看到它會如何失敗。 –

+0

除非你的promise.success混淆了它,否則你的代碼中的那部分並沒有真正做任何事情。 –