在我调用服务后,我的视图在AngularJS中没有更新

时间:2013-04-15 04:24:21

标签: angularjs

我有以下服务:

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");
            //    });
        }
    });

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

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

1 个答案:

答案 0 :(得分: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;
});