2016-09-09 35 views
0

我是Angular世界的初學者,我無法弄清爲什麼我仍然遇到「未定義」錯誤。這裏是我的代碼:AngularJS中的工廠「未定義」

angular.module('dopasujApp').factory('getProducts', ['$http', function ($http) { 
var dataFactory = {}; 
dataFactory.sort='ASC'; 
dataFactory.orderBy='PRODUCT_NAME'; 
dataFactory.search='a'; 
dataFactory.filters={}; 
dataFactory.filters.ATTRIBS=[46,25]; 
dataFactory.filters.SIZE=[165,40]; 

getProducts.listProducts = function() { 
    var request = $http({ 
     method: "POST", 
     url: "http://******/backend/internalAPI.php?action=getListing&fit=1&limit=10&vendor=20", 
     headers: { 
      'Content-Type': 'application/json' 
     }, 
     data: { 
      data: dataFactory 
     } 
    }); 

    var products = angular.fromJson(request); 

    return products; 
} 

return false; 

}]); 

這裏是我的控制器(僅用於測試目的)。

在工廠可變
angular.module('dopasujApp') 
.controller('MainCtrl', ['getProducts', '$scope','$rootScope', 
    function (getProducts, $scope,$rootScope) { 
     console.log(getProducts.listProducts()) 
    } 
]); 

回答

1
  1. 的getProducts沒有定義。您以前使用的名稱只是角度的信息名稱

  2. 在您的工廠中,您返回「false」作爲實際結果。所以角度對待你的「假」作爲結果。

應該看起來像:

angular.module('dopasujApp').factory('getProducts', ['$http', function ($http) { 
    var dataFactory = {}, getProducts = {}; 
    dataFactory.sort='ASC'; 
    dataFactory.orderBy='PRODUCT_NAME'; 
    dataFactory.search='a'; 
    dataFactory.filters={}; 
    dataFactory.filters.ATTRIBS=[46,25]; 
    dataFactory.filters.SIZE=[165,40]; 

    getProducts.listProducts = function() { 
     return $http({ 
      method: "POST", 
      url: "http://******/backend/internalAPI.php?action=getListing&fit=1&limit=10&vendor=20", 
      headers: { 
       'Content-Type': 'application/json' 
      }, 
      data: { 
       data: dataFactory 
      } 
     }); 
    } 

    return getProducts; 

}]); 

控制器

angular.module('dopasujApp').controller('MainCtrl', ['getProducts', '$scope','$rootScope', 
    function (getProducts, $scope,$rootScope) { 
     getProducts.listProducts().then(function(res) { 
      console.log(res.data); 
     }); 
    } 
]); 

編輯:

還要注意,$ HTTP回報的承諾,而不是實際的查詢結果,更新我的例子相應地

+0

謝謝,你解決了我的問題。 – jazzgot

0

嘗試這樣

var yourapp = angular.module('dopasujApp', []); //your defining your app first 
yourapp.factory('getProducts', function ($http) 
{ 
    return { 
     //write your factory methods 
    }; 
});  

你控制器應該有如下

yourapp.controller('MainCtrl', function PostController($scope, getProducts, $compile) 
{ 
    //here your controller methods 
});