访问http.get回调中的$ scope日期

时间:2017-01-11 21:58:55

标签: javascript angularjs

我需要将$http.get返回的数据存储在我的$scope控件使用的ui-grid变量中。

我确定我错过了一些非常简单的东西,但我不知道是什么。这是我的代码:

app.controller('AdminUsersGridCtrl', function ($scope, $http, uiGridConstants) {

    $http.get('/api/admin/user')
    .success(function (response, $scope) {
        $scope.myData = response;
    })
    .error(function (error) {
        console.log(error);
    });

    console.log($scope.myData);

    $scope.gridOptions = {
      data: 'myData',
      enableFiltering: true,
      columnDefs: [
        { field: 'firstName' },
        { field: 'lastName' },
        { field: 'jobTitle'},
        {
          field: 'email',
          filter: {
            condition: uiGridConstants.filter.ENDS_WITH,
            placeholder: 'ends with'
          }
        },
        {
          field: 'phone',
          filter: {
            condition: function(searchTerm, cellValue) {
              var strippedValue = (cellValue + '').replace(/[^\d]/g, '');
              return strippedValue.indexOf(searchTerm) >= 0;
            }
          }
        },
      ]
    };        

  });

我的控制台内部成功打印undefined。如何访问$scope功能中的原始$http.get success

2 个答案:

答案 0 :(得分:1)

My console inside success prints undefined

但是,你的控制台不在success方法中。这是在里面:

$http.get('/api/admin/user')
.success(function (response) {
    $scope.myData = response;
    console.log($scope.myData);
})
.error(function (error) {
    console.log(error);
});

这不是:

// order of events..
// #1...first $http
$http.get('/api/admin/user')
.success(function (response) {
    //... #3 third. Now finally response is defined. the end
    $scope.myData = response;
})
.error(function (error) {
    console.log(error);
});

//... #2 second. $scope.myData definitely IS undefined
console.log($scope.myData);

巨大的差异。您的成功回调中也不需要包含$scope。我以前从未见过这个。你从哪里得到的?

答案 1 :(得分:0)

如果在外部文件中使用服务,服务器调用何时更好,但在您的情况下,$ scope没有响应,因为代码在服务完成之前执行,请尝试使用$ timeout或类似的东西:

app.controller('AdminUsersGridCtrl', function ($scope, $http, uiGridConstants) {

$http.get('/api/admin/user').success(function (response) {
    $scope.myData = response;
    fillGridOptions();
}).error(function (error) {
    console.log(error);
});

function fillGridOptions() {
$scope.gridOptions = {
    data: 'myData',
    enableFiltering: true,
    columnDefs: [
      { field: 'firstName' },
      { field: 'lastName' },
      { field: 'jobTitle' },
      {
          field: 'email',
          filter: {
              condition: uiGridConstants.filter.ENDS_WITH,
              placeholder: 'ends with'
          }
      },
      {
          field: 'phone',
          filter: {
              condition: function (searchTerm, cellValue) {
                  var strippedValue = (cellValue + '').replace(/[^\d]/g, '');
                  return strippedValue.indexOf(searchTerm) >= 0;
              }
          }
      },
    ]
};

}

});