2015-06-16 4 views
1

я создал очень простой заводУгловая область видимости не обновляется до значения заводской

angular.module('vpmClient') 

.factory('DatosFactory', function($http){ 
    var datos = {}; 
    datos.data = []; 

    datos.getDatos = function(){ 
     $http.post('php/dataHandler.php',{action:"get_datos"}).success(function(data){ 
      datos.data = data; 
     }); 
    }; 

    datos.getDatos(); 

    return datos; 
}) 

И в контроллере я установить значение от «datos.data» в рамках переменной

angular.module('vpmClient') 

.controller('DatosController', function($http,$scope,DatosFactory){ 
    $scope.datos = DatosFactory.data; 
    $scope.datoSeleccionado = {}; 

    $scope.getDatos = function(){ 
     console.log(DatosFactory.data); 
     return DatosFactory.data; 
    } 

    $scope.mostrarDato = function(dato){ 
     //$scope.datoSeleccionado = dato; 
     //Magia 
    } 
}); 

мне нужно что значение «scope.datos» обновляется после того, как сообщение с завода заканчивается

Примечания: Я сделал console.log с завода (внутри успеха), и он также дает мне объект, также в контроллере i creat вызывается функция, возвращающая значение фабрики из консоли браузера, и она также работает, но когда i console.log «scope.datos» возвращает пустой объект.

Извините за мой плохой английский

+0

Когда вы видите пустой console.log? Где вы его разместили? –

ответ

2

Просто вернуть обещание от $ HTTP в контроллер

angular.module('vpmClient').factory('DatosFactory', function($http){ 
var datos = {}; 
datos.data = []; 

datos.getDatos = function(){ 
    return $http.post('php/dataHandler.php',{action:"get_datos"}); 
}; 

return datos; 
}) 

И в контроллере вы позвоните по телефону

angular.module('vpmClient').controller('DatosController', function($http,$scope,DatosFactory){ 



$scope.datos = DatosFactory.data; 
$scope.datoSeleccionado = {}; 

$scope.getDatos = function(){ 
    DatosFactory.getDatos() 
    .then(function(httpResponse){ 
    console.log(httpResponse.data); 
    $scope.datoSeleccionado = httpResponse.data; 
    }) 
} 
}); 
+1

Этот правильный подход .. Также можно использовать 'then' или' success'. OP, к которому вы обращались к var до завершения записи. – vinayakj

+0

Мне нравится «тогда» больше. Только для взглядов :) – McDit

+0

уверенный .. thats whay +1. но это было для OP, если он хотел использовать «успех» как использующий ранее. – vinayakj

1

Вы должны использовать then ключевое слово:

$scope.getDatos = function() { 
    DatosFactory.getDatos().then(function(data) { 
     $scope.datos = data; 
    }); 
} 
+0

$ scope.getDatos это функция, которую я использую для проверки с помощью консоли браузера, она никогда не выполняется – user3291094

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