0

我有以下服务:

angular.module('adminApp')
.factory('subjectService', function ($http) {
    return {
        get: function (testAccountId) {
            return $http({
                method: 'GET',
                url: '/api/Subjects/GetSelect',
                params: { testAccountId: testAccountId }
            });
        }
    }
});

当我直接调用 http 但现在使用该服务时,以下代码有效:

    $scope.$watch('selectedTestAccount', function () {
        if ($scope.selectedTestAccount != null) {
            $scope.myData = null;

            $http({
                method: 'GET',
                url: '/api/Subjects/GetSelect',
                params: { testAccountId: $scope.selectedTestAccount }
            }).success(function (result) {
                $scope.subjects = result;
                $scope.myData = null;
            });

            //subjectService.get($scope.selectedTestAccount)
            //    .then(function (result) {
            //        $scope.subjects = result;
            //        $scope.myData = null;
            //        alert($scope.subjects);
            //    }, function (result) {
            //        alert("Error: No data returned");
            //    });
        }
    });

与这个问题有关。这是调用服务的正确方法吗?我看到了另一个看起来像下面的建议并使用了 Promise。我应该这样做:

services.factory('MultiRecipeLoader', ['Recipe', '$q',
   function(Recipe, $q) {
      return function() {
         var delay = $q.defer();
         Recipe.query(function(recipes) {
            delay.resolve(recipes);
         }, function() {
            delay.reject('Unable to fetch recipes');
         });
         return delay.promise;
      };
}]);
4

1 回答 1

0

我试图在 plunker 中重现您的示例。让我知道它是否是您正在寻找的:

http://plnkr.co/edit/6s5utccjgHTnrrokM1u8?p=preview

在这个演示中,有一个下拉菜单可以更改控制器中$watched的帐户变量的值。如果帐户值发生变化,它会调用 SubjectsServices 并使用主题名称更新无序列表。此外,还有一个填充了相同值的下拉列表。

如果更改值的唯一方法是通过下拉菜单,也许您只能在 select 上使用ng-change指令来调用将执行相同工作的更新函数。

$scope.update = function() {
    SubjectService.get($scope.account).then(function(result) {
        $scope.subjects = result.data;
    }, function(result) {
        // error handling...
    }); 
};

<select ng-change="update()"></select>

$http承诺从方法接收的参数中的对象具有包含请求数据的数据属性。

$http.get(...).then(function(result) {
    var subjects = result.data;
});
于 2013-04-15T04:52:32.220 回答