angularjs – 为控制器中的工厂调用服务
发布时间:2020-12-17 06:50:33 所属栏目:安全 来源:网络整理
导读:调用在我的控制器中使用.factory创建的服务时遇到问题. 代码如下所示. 工厂(app.js): .factory('Database',function($http){ return { getDatabase: function(){ var database = {}; $http.get('http://localhost:3001/lookup'). success(function(data){ d
调用在我的控制器中使用.factory创建的服务时遇到问题.
代码如下所示. 工厂(app.js): .factory('Database',function($http){ return { getDatabase: function(){ var database = {}; $http.get('http://localhost:3001/lookup'). success(function(data){ database.companyInfo = data.info.companyInfo; }); }). error(function(data){ console.log('Error' + data); }); return database; } }; }) 控制器: angular.module('webClientApp') .controller('MainCtrl',function (Database,Features,$scope,$http) { $scope.databaseString = []; $scope.quarters = ['Q1','Q2','Q3','Q4']; $scope.years = ['2004','2005','2006','2007','2008','2009','2010','2011','2012','2013','2014']; $scope.features = Features.getFeatures(); $scope.database = Database.getDatabase(); console.log($scope.database); 现在,当我在Firebug中检查元素时,我得到了在GET语句结果之前打印出的console.log($scope.database). $scope.database显示为Object {},其中包含所有属性. 这里有什么问题?有人能帮我吗? 解决方法
$http.get()调用是异步的,并使用promise对象.因此,根据您提供的代码,在服务中运行success方法之前,您最有可能输出$scope.database.
我构建了所有的服务方法来传递成功或失败的功能.这将是服务: .factory('Database',function($http){ return { getDatabase: function(onSuccuess,onFailure){ var database = {}; $http.get('http://localhost:3001/lookup'). success(onSuccess). error(onFailure); } }; }) 这将是控制器代码: angular.module('webClientApp') .controller('MainCtrl',$http) { $scope.databaseString = []; $scope.quarters = ['Q1','Q4']; $scope.years = ['2004','2014']; $scope.features = Features.getFeatures(); Database.getDatabase(successFunction,failureFunction); successFunction = function(data){ $scope.database = data.info.companyInfo; console.log($scope.database); }); failureFunction = function(data){ console.log('Error' + data); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |