2013-05-16 111 views
1

我創建了一個工廠來檢索json文件。通話結束後,我確實看到了在控制檯中輸出的對象,但數據並未顯示在我的視圖中。我是不是在我的控制器中正確調用工廠?數據未從angularjs工廠傳回

這裏是我的應用程序:

var tools = angular.module("tools", []) 

tools.config(function ($routeProvider) { 

    $routeProvider.when('/home', { 
     templateUrl: 'home.html', 
     controller: 'HomeController' 
    }); 
    $routeProvider.when('/about', { 
     templateUrl: 'about.html', 
     controller: 'AboutController' 
    }); 




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

}); 

tools.controller("HomeController", function ($scope, fetchData) { 

    $scope.record = fetchData.getData(); 
    $scope.clearSearch = function() { 
     $scope.search = ""; 
     $scope.name2 = ""; 
    } 
    $scope.name2 = ""; 
    $scope.search = ""; 



}); 


tools.controller("AboutController", function ($scope) { 
    //nothing yet 
}); 



tools.factory('fetchData', function ($http) { 
    return { 
     getData: function() { 
      $http({ 
       method: 'GET', 
       url: 'list.json' 
      }). 
      success(function (data, status, headers, config) { 
       console.log(data); 
       return data; 
      }); 
     } 
    } 


}); 
+0

我們需要查看您的觀點才能徹底回答此問題。 –

回答

2

$http調用是異步的(因爲都是AJAX請求),所以在回調的return聲明實際上並沒有返回它的數據到控制器。你要麼要考慮使用$resource,它可以工作幾乎是你寫的,或傳遞一個回調getData,如:

在你的控制器:

fetchData.getData(function (data) { 
    $scope.record = data; 
}); 

在您的服務:

tools.factory('fetchData', function($http) { 
    return { 
     getData: function(cb) { 
      $http({method: 'GET', url: 'list.json'}).success(cb); 
     } 
    } 
}); 
+0

非常感謝!如果我將其更改爲使用$資源,您能否快速向我展示語法? –

+0

@SunnyDay不幸的是 - 它需要你的服務器上有一個適當的REST服務(你目前可能沒有)。你可以觀看這個演示文稿...他們在36:00演示它 - parleys.com/play/5148922b0364bc17fc56c91b/about – Langdon

+0

非常棒。我現在知道了。再次感謝你的幫助! –