0

У меня проблема с контроллером со свойствами объекта. Моя фабрика возвращает один объект с другим объектом и одной функцией. Я могу вызвать функцию, но я не могу получить доступ к другим свойствам объекта. Вот мой код:Angularjs неопределенная переменная в контроллере

Моя фабрика

app.factory('User', function() { 

var User = {}; 

User.get = function() { 
    // Call the service... done 
    User.data = response.data;   
}; 

return User; 
}); 

Мой контроллер

app.controller('Controller', function ($scope, User) { 
$scope.user = User; 

console.log(user); // print correct one object with 
         the function get and data object with user data 

console.log(user.data); // undefined 

}); 

Спасибо, и извините за мой английский катастрофы

+2

Вы на самом деле не получить() данные –

+0

я могу назвать получить() функцию, но я не могу получить доступ к $ scope.user.data –

+1

Поле «User.data» intialized только в User.get (), и вы не вызвали его. – Rasalom

ответ

0

Это моя ошибка, я заехать в другой контроллер User.get() ;, Моя проблема заключается во времени

app.controller('Controller', function ($scope, User) { 
    $scope.user = User; 

    setTimeout(function(){ 
     console.log(user.data); // i have data 
    }, 5000); 


}); 
+1

Вы не решаетесь с 'setTimeout'. Вам нужно использовать методологию '$ prom'. В вашем примере кода 'setTimeout' сломается, если потребовалось более 5 секунд, чтобы вернуть данные из вашего вызова AJAX. –

+0

. Спасибо @LloydBanks. Я делаю обратный вызов, когда служба getUser ответила, а затем я вызываю функцию init моего контроллера. –

0

app.factory('User', function() { 
 

 
var User = {}; 
 
    
 
    User.data=null; 
 

 
User.get = function() { 
 
    // Call the service... done 
 
    User.data = response.data;   
 
}; 
 

 
return User; 
 
});

Контроллер:

app.controller('Controller', function ($scope, User) { 
 
$scope.user = User; 
 

 
console.log(user); 
 

 
console.log(user.data); // null,because you did not call the method User.get(); 
 
    
 
    User.get(); 
 

 
    
 
console.log(user.data); // this will print the response data which you assign in the User.get() method 
 
});

В коде вы данный, User.data даст объект, но, прежде чем вы должны вызвать User.get() функцию.

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

0

У вас есть две проблемы. То, как вы настраиваете завод, причиняет вам боль. Поэтому я бы вернул всю фабрику, чтобы у вас была эта функция. Вы не должны определить пользователя внутри завода, потому что это название завода (поэтому он является объектом)

app.factory('User', function() { 

return { 
    get: function() { 
     //return API call 
    }; 
}); 

Далее вы определяете $ scope.user и последующего вызова пользователя. Вы никогда не определяли пользователя, просто $ scope.user. Кроме того, вы должны вызвать функцию get в пользователе для возврата данных. И это не будет

app.controller('Controller', function ($scope, User) { 
$scope.user = User.get(); 

console.log($scope.user); // This will be the data 

}); 
0

Использование settimeout не будет автоматически Пожар $digest и Двухсторонняя привязка данных может не знать об обновлении.

  1. пользователя д и пообещать вместо ожидания
  2. если требуется тайм-аут, использование $ таймаут вместо SetTimeout.
+0

Спасибо, я использую тайм-аут собственного javascript только для тестирования, я решил свою проблему с обещанием $ q –

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