AngularJS:控制器未获得更新的出厂值

时间:2014-05-14 22:02:45

标签: javascript angularjs angularjs-controller angularjs-factory

我正在更新工厂中的对象属性,它似乎没有更新控制器中引用的属性。

说我有一个看起来像这样的工厂......

app.factory('User', function ($http)
{  
 $http.defaults.useXDomain = true;

    var User = {
        Name: "",
        JobTitle: "",
        isloaded: false
    };

User.GetUser = function (ID)
{
       $http(
            {
                url: "webservice uri",
                method: "GET"
            }
        ).success(function(data, status, headers, config)
        {               
            User.isloaded= true;

        }).error(function(data, status, headers, config)
        {

        })      
}
return User;
});

属性'isloaded'最初设置为false,然后一旦$ http调用通过成功回调,它最终设置为false。

然后我有一个看起来像

的控制器
controllers.DefaultCtrl = function($scope, User)
{ 
    $scope.showMessage = User.isloaded;
    $scope.getUser = function ()
    {
        User.GetUser("11111");
    }
    $scope.getUser();   
    }

与此html

相关联
<h1>{{showMessage.isloaded ? 'success' : 'Loading...'}}</h1>

最终我希望它能说'成功',然而,文字永远不会改变html

1 个答案:

答案 0 :(得分:0)

问题在于您正在分配基元:

 $scope.showMessage = User.isloaded;

showMessage被指定为false,它不是&#34;指向&#34;到isloaded属性。

您应该做的是将User设置为范围变量,例如:

controllers.DefaultCtrl = function($scope, User)
{ 
  $scope.user = User;
  $scope.user.getUser("11111");   
}

然后在你的HTML中你可以做到:

<h1>{{user.isloaded ? 'success' : 'Loading...'}}</h1>