加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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 {},其中包含所有属性.
但是,如果我尝试使用console.log($scope.database.companyInfo),我得到一个未定义的结果,而我应该得到我从theDatabase`服务传递的data.info.companyInfo(在这种情况下是一个数组) .

这里有什么问题?有人能帮我吗?
(如果您需要澄清,请告诉我..)

解决方法

$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);
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读