是否可以在服务工厂()中的$ http.get()。success()中返回数据?

时间:2014-12-23 10:23:09

标签: jquery angularjs

我在角度js中创建了联系人列表。在下面的例子中,我创建了服务工厂,因为我无法处理服务中的$ http.post()。success()方法。



angular.module('contactApp', ['ngRoute'])

.config(['$routeProvider',
  function($routeProvider) {
    $routeProvider.
    when('/contactList', {
      templateUrl: 'template/contactList.cfm',
      controller: 'contList'
    }).
    when('/contactAddEdit', {
      templateUrl: 'template/contactAddEdit.cfm',
      controller: 'contactAddEdit'
    }).
    when('/contactAddEdit/:contactID', {
      templateUrl: 'template/contactAddEdit.cfm',
      controller: 'contactAddEdit'
    }).
    otherwise({
      redirectTo: '/contactList'
    });
  }
])

.controller('contList', function($scope, studentSession) {

  studentSession.getSessions().success(function(data, status) {

    $scope.members = = queryToObject(data);

  });
})

.factory('studentSession', function($http) {

  return {

    getSessions: function() {

      return $http.get('template/dbSelect.cfm');

    }

  };

});




1 个答案:

答案 0 :(得分:0)

你需要使用then()而不是success()你要从工厂回复承诺:

studentSession.getSessions().then(function(data, status) {

    $scope.members = = queryToObject(data);

  }).catch(function (err) {

    console.log(err);
  });

如果您需要更多支持旧浏览器,如IE8或Android mobile< 4.1使用此代替:

studentSession.getSessions().then(function(data, status) {

        $scope.members = = queryToObject(data);

      },function (err) {

        console.log(err);
      });

然后如果您真的希望从工厂返回承诺成功,您将需要一个活动:

.controller('contList', function($scope, studentSession) {

  studentSession.getSessions();

  $scope.$on('session:retrievedSession', function (data) {

    console.log('Session retrieved is: ', data.response);
  });
})

.factory('studentSession', function($rootScope, $http) {

  return {

    getSessions: function() {

      return $http.get('template/dbSelect.cfm').success(function (response) {

        $rootScope.$broadcast('session:retrievedSession', {response:response});
      });

    }

  };
});