2015-01-25 2 views
1
$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(); 

Этих две частей находятся в том же контроллере, но не может получить доступ к $ scope.shop_id вне этого $ HTTP, я получил неопределенный вместо номера идентификатораAngularjs обращающегося вара, получил неопределенные

+0

1-я вещь withCredentials должна быть внутри заголовков, она должна быть как 'headers: {withCredential: true}' добавить это в ur $ http –

+1

@pankajparkar. Думаю, вы ошибаетесь, это должно быть просто частью самого объекта конфигурации. Вы можете проверить свои знания pehaps !! См. [Официальная документация] (https://docs.angularjs.org/api/ng/service/$http#usage) – PSL

+0

@PSL это мое плохое, извините. –

ответ

0

ВЫГЛЯДИТ например, в строке 8 вы сохраняете значение id как $scope.shopid, но в нижней части кода вы получаете доступ к значению с помощью $scope.shop_id. Добавить/удалить подчеркивание в одной из ваших ссылок.

Кстати, было бы полезно, если бы вы отформатировали свой код в удобном для чтения виде. Очень трудно следовать.

Редактировать: Кроме того, теперь, когда форматирование немного очищено, похоже, что все еще будет ошибка даже после исправления именования свойств. $scope.shopid не будет определяться до тех пор, пока HTTP-запрос не получит ответ. Тем не менее, последняя строка кода будет запущена немедленно, даже до того, как будет получен ответ, поэтому $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 и расчета рейтинга опыта. Контроллер делает слишком много, что, вероятно, является одной из причин, по которым вы получили несколько ошибок. Попытка создания небольших модульных сервисов, на которые опирается контроллер, - сделает ваш угловой код намного легче работать.

+0

спасибо за ваше объяснение, и, наконец, я получил его из-за вашей помощи :) – spider

Смежные вопросы