$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号
答案 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连接并体验评级计算。控制器做得太多了,这可能是你遇到一些错误的一个原因。尝试制作控制器所依赖的小型模块化服务 - 它将使您的角度代码更易于使用。