ng-init在angularjs控制器末尾触发一个函数

问题描述 投票:0回答:1

我想将用户名和ID从php登录页面传递给angularjs控制器onload。我尝试通过ng-init调用basicDetails(username,id)。此功能在主控制器末端触发。另外一个问题是在basicDetails函数内部将参数传递给angularjs变量print传递值,在它外面显示为空

<body  ng-controller="mainController" ng-init="basicDetails('<?php echo$_SESSION["username"];?> ','<?php echo$_SESSION["itmsNo"];?> ')">
<center>
    <div >
      <b><?php echo htmlspecialchars($_SESSION["username"]); ?></b><br>
                <a href="reset-password.php" class="btn btn-warning">Reset  Password</a><br>
        <a href="logout.php" class="btn btn-danger">Sign Out</a>
    </div>   </center>
<!-- Main div showing different templates loaded by ng-view directive -->
<div class="container main"  ng-view>
</div>

Maincontroller.js

templeApp.controller('mainController', ['$scope','$rootScope','$http','webService', function($scope,$rootScope, $http,webService,user) {
    $rootScope.loggedUser;
    $scope.itmsNo;

    // This function trigger by ng-init , but called end of main controller 
    $scope.basicDetails = function(logedUser,itmsNo){
        $rootScope.loggedUser =logedUser;
        $scope.itmsNo =itmsNo;    
        console.log($scope.loggedUser );  // console print actual value          
    }
    console.log('..'+$scope.loggedUser );  // console print empty value

    $scope.user = webService.userData('impl/userData.php',$scope.loggedUser);

}]);
php angularjs parameter-passing onload ng-init
1个回答
1
投票

正如您所说,ng-init在其余的控制器代码之后运行。这就是为什么尝试在undefined之外登录时会得到basicDetails的原因。尚未设置,因为basicDetails稍后进行设置。

因此,请在basicDetails内运行所有初始化代码:

templeApp.controller('mainController'...
  $scope.basicDetails = function(logedUser, itmsNo) {
    $rootScope.loggedUser;
    $scope.itmsNo;

    $rootScope.loggedUser = logedUser;
    $scope.itmsNo = itmsNo;
    console.log($scope.loggedUser);

    $scope.user = webService.userData('impl/userData.php', $scope.loggedUser);    
  }
}}

您可以将其从basicDetails重命名为init之类,这样更有意义。

© www.soinside.com 2019 - 2024. All rights reserved.