Angularjs访问var,未定义

时间:2015-01-25 05:18:15

标签: angularjs

$http({
  method: 'GET',
  withCredentials: true,
  url: 'http://...' + $scope.orderId
}).success(function(data) {
  $scope.order = data;
  $scope.products = $scope.order.items; * * $scope.shopid = $scope.order.shop_id; * *
  $scope.packagings = $scope.order.delivery.packaging_details;
  $scope.packaging_breakdown = $scope.order.delivery.packaging_breakdown.combine_packaging;
  $scope.packaging_breakdown_items = $scope.order.delivery.packaging_breakdown.combine_packaging.items;
  $scope.item_arr_length = $scope.packaging_breakdown_items.length;
  $scope.show_orderDetails = true;
  $scope.shop = $resource('http://..' + $scope.shopid).get();
}).error(function(data, status, headers, config) {
  $scope.show_orderDetails = true;
  $scope.err_msg = data.error.message;
  $scope.status = status;
  console.log($scope.status);
  if ($scope.status == "400")
    document.getElementById('order_page').innerHTML = "<div class='alert-box error'><img src='images/error.png'/><span id='err_span'>error:</span>" + $scope.err_msg + "</div>";
});

var obj1_overall_experience_rating = $firebase(new Firebase("https://..." + * * $scope.shop_id * * +"/overall_experience_rating/counter1")).$asObject();

这两个部分位于同一个控制器中,但无法访问此$ http以外的$ scope.shop_id,我的未定义而非id号

1 个答案:

答案 0 :(得分:0)

在第8行看来,您将ID值保存为$scope.shopid,但在代码底部,您使用$scope.shop_id访问该值。在您的一个参考文献中添加/删除下划线。

顺便说一句,如果您以更易于阅读的方式格式化代码,将会很有帮助。很难遵循。

编辑:此外,现在格式化清理了一下,即使修复了属性命名,看起来仍然会出现错误。在HTTP请求获得响应之前,不会定义$scope.shopid。但是,即使在有响应之前,最后一行代码也会立即运行,因此在最后一行代码中仍然未定义$scope.shopid,即使修复了命名也是如此。

这应该有效:

var obj1_overall_experience_rating;

$http({
  method: 'GET',
  withCredentials: true,
  url: 'http://...' + $scope.orderId
}).success(function(data) {
  // data parsing
  $scope.shopid = $scope.order.shop_id;
  // more data parsing
  setExpRating($scope.shopid);
}).error(function(data, status, headers, config) {
  // error handling
});

// this could be made even more modular using an angular service
function setExpRating(shopid) {
  var connection = new Firebase("https://..." + shopid +"/overall_experience_rating/counter1");
  overall_experience_rating = $firebase(connection).$asObject();
}

我在此处所做的是将$scope.shop_id的所有引用更改为$scope.shopid,并添加了一个用于处理Firebase连接的函数,该函数仅在从初始HTTP请求收到响应时调用。

我还建议您更进一步,创建一两个服务来处理Firebase连接并体验评级计算。控制器做得太多了,这可能是你遇到一些错误的一个原因。尝试制作控制器所依赖的小型模块化服务 - 它将使您的角度代码更易于使用。