【问题标题】:Why not available $scope.value of the variable in runtime?为什么在运行时变量的 $scope.value 不可用?
【发布时间】:2014-11-06 23:21:23
【问题描述】:

为什么在运行时变量的 $scope.reserved 不可用?在模板中 {{reserved}} 是 ок,但在控制器中值 = undefibed。

我有以下代码

服务:

'use sctict'

angular.module('starter.services', [])
    .service('api', ['$http', '$q', function api($http, $q) {
        var server = 'http://localhost/ires-api';
        var jsondata = {
            getReservedHours: function (masters, date) {
                var deferred = $q.defer();
                var promise = $http({ method: 'GET', url: server + '/reservations/' + masters + '/' + date, cache:true})
                    .success(function(response) {
                        //return response;
                        deferred.resolve({
                             data: response
                             });
                        }).error(function(msg, code) {
                          deferred.reject(msg);
                          $log.error(msg, code);
                        });
                return deferred.promise;
            },
        }
        return jsondata;
    }]);

控制器

$scope.click = function(){
     masters = [5,51];
     api.getReservedHours(masters,  '2007/08/27').then(function(response) {
                    $scope.reserved = response.data;
        });

        console.log($scope.reserved); // undefined ....
}

【问题讨论】:

  • $scope.reserved 出现在显示的代码中的唯一位置是当您尝试记录它时。您还试图在承诺回调之外记录它,然后 AJAX 请求尚未完成
  • 我尝试使用承诺。我认为在这种情况下它会起作用吗?
  • 认为什么可行?

标签: angularjs angularjs-scope angularjs-service angularjs-http


【解决方案1】:

因为“getReservedHours”是一个异步请求,并且在打印时 $scope.reserved 是未定义的(因为请求未完成)。请改用此代码

    $scope.click = function(){
         masters = [5,51];
         api.getReservedHours(masters,  '2007/08/27').then(function(response) {
                        $scope.reserved = response.data;
                        console.log($scope.reserved);  // This would work
            });

            console.log($scope.reserved); // undefined ....
    }

【讨论】:

    【解决方案2】:

    我认为你错过了任务?

     api.getReservedHours(masters,  '2007/08/27').then(function(response) {
                        $scope.reserved = response.data;
            });
    

    【讨论】:

      猜你喜欢
      • 2015-03-06
      • 1970-01-01
      • 2023-04-06
      • 1970-01-01
      • 1970-01-01
      • 2021-05-05
      • 1970-01-01
      • 2018-07-25
      • 2013-03-13
      相关资源
      最近更新 更多