Angularjs在控制器中未定义变量

时间:2014-11-26 16:19:21

标签: javascript angularjs undefined angularjs-controller angularjs-factory

我在控制器中遇到了对象属性的问题。我的工厂用另一个对象和一个函数返回一个对象。我可以调用该函数,但我无法访问另一个对象属性。这是我的代码:

我的工厂

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

});

谢谢,对不起我的英语灾难

4 个答案:

答案 0 :(得分: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()函数。

抱歉我的英文.....

答案 1 :(得分:0)

你有两个问题。你建立工厂的方式伤害了你。所以我会回到整个工厂,所以你有这个功能。您不必在工厂内定义用户,因为它是工厂的名称(因此它是一个对象)

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

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

接下来,您将定义$ scope.user然后调用user。您从未定义过用户,只需$ scope.user。此外,您必须在用户中调用get函数以返回数据。它不会是

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

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

});

答案 2 :(得分:0)

是我的错误,我在另一个控制器User.get();中调用,我的问题及时

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

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


});

答案 3 :(得分:0)

使用settimeout不会自动触发$digest,而双向数据绑定可能无法识别更新。

  1. 用户q和承诺而不是超时
  2. 如果需要超时,请使用$ timeout而不是settimeout。