2014-01-10 8 views
0

Я контроллер называется VforumController и модель под названием VforumModelПочему этот вар в угловой не обновляется?

VforumController

VforumJS.controller('VforumController', function($scope, VforumModel) 
{ 
     $scope.currentIndex = 0; 
     $scope.presentationData.location = "http://a.web.url"; 

     $scope.currentSlide = VforumModel.getImage({ 
      'type' : 'slide', 
      'index' : $scope.currentIndex + 1, 
      'location' : $scope.presentationData.location 
     }); 
}); 

VforumModel

VforumJS.service('VforumModel', function($http) 
{ 
    return { 
     getImage: function($data) 
     { 
      return $http.post('resources/auth.php', $data, {timeout:20000}).success(function(response) 
      { 
       console.log(response); //this outputs the correct data I need to the console 
       return response; 
      }); 
     } 
    } 
}) 

Когда я делаю console.log(response), я могу видеть данные мне нужно, однако, значение в моем контроллере не обновляется. Я предполагаю, что $scope.currentSlide превратится в данные, которые я ищу. В моем случае хешированный URL-адрес возвращался из PHP-скрипта.

ответ

2

$http возвращает обещание, поэтому вам нужно дождаться его загрузки, а затем назначить его. Вы не связываетесь напрямую с помощью возвращаемых значений цепочки обещаний «успех/затем/ошибка». Все коммуникации осуществляются через объекты обещания. Вы «ждете», чтобы что-то произошло, и как только это вас вызовет ... Они так трудно объяснить ...

VforumJS.service('VforumModel', function($http){ 
    return { 
     getImage: function($data){ 
      return $http.post('resources/auth.php', $data, {timeout:20000}); 
     } 
    } 
}); 

VforumModel.getImage({ 
'type' : 'slide', 
'index' : $scope.currentIndex + 1, 
'location' : $scope.presentationData.location 
}).success(function(response) { 
     $scope.currentSlide = response; 
    } 
); 
+0

Я думал, что возвращение ответа в успех будет работать? Вы имеете в виду это в модели? Я пишу свой пост за стол в http? – Ronnie

+0

Возвращение ответа не делает ничего успешным ... вы можете просто сделать выше в успехе ... один с. – Nix

+0

Ничего себе, это полностью открыло мне глаза на лучший способ сделать некоторые работы с моделями. Я часто делал '$ broadcast', потому что я не мог получить данные для возврата. Это круто! Я знаю, что вы хотите объяснить. Я должен объяснить некоторые из того, что я делаю с моим боссом, иногда. Yi yi. Большое спасибо человеку, это было очень полезно – Ronnie

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