簡體   English   中英

Angularjs 1.3.15-Promise返回后更新$ scope

[英]Angularjs 1.3.15 - Updating $scope after Promise Returned

我正在學習angularjs,並嘗試在登錄后使用用戶名更新導航欄,但是用戶名沒有出現。 這是我正在遵循的過程:

  1. 用戶登錄成功。
  2. 在登錄承諾中“然后”之后(以確保返回了承諾),請通過工廠獲取用戶資料,該工廠將返回用戶資料。
  3. 成功獲取用戶配置文件后,將配置文件保存到$ scope.user,以便更新DOM。

這是Nav Bar的HTML(不確定是否重要,但是在頁面加載時使用ng-include將其放入index.html中):

<nav ng-controller="menuController">
    <div class="navbar-header">
        <a class="navbar-brand" href="index.html">
            Admin Site
        </a>
    </div>
    <ul >
        <li ><span>Welcome {{ user.firstName }}</span></li>
    </ul>
  </div>
</nav>

這是menuController js文件:

    angular
    .module('myApp')
    .controller("menuController", ['$scope', '$auth', '$timeout', '$window', 'toaster', 'Account',
        function UserCtrl($scope, $auth, $timeout, $window, toaster, Account) {

            $scope.user = [];

            $scope.login = function () {
                $auth.login({email: $scope.email, password: $scope.password})
                    .then(function(response){
                        toaster.pop('success', "Logged In", "You have successfully logged into the system"); // This fires correctly
                        Account.getProfile()
                            .success(function(obj){
                                $scope.user = obj;
                                console.log('User: ' + 
$scope.user.firstName);  //This Works! But user.firstName in HTML is not updated
                            });
                    })
                    .catch(function (response) {
                        toaster.pop('error', "Login Failure", response.data.message);
                    })
            };   
        }
    ]);

來自index.html的HTML

<div id="wrapper">
        <div ng-include='"templates/navigation.html"'></div>

        <div ng-view></div>

</div>
<!-- /#wrapper -->

問題是導航欄中的user.firstName永遠不會更新為用戶的名字。 我想念什么嗎?

感謝您的任何幫助!

Account.getProfile()返回什么? 它是有角度的承諾還是在有角度的框架之外的東西? 也許您應該將代碼包裝在$apply范圍內:

Account.getProfile()
    .success(function(obj){
        $scope.$apply(function() {
            $scope.user = obj;
            console.log('User: ' + 
            $scope.user.firstName);  //This Works! But user.firstName in HTML is not updated
        });
    });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM