简体   繁体   English

ng-init 在 angularjs controller 末尾触发 function

[英]ng-init trigger a function at end of angularjs controller

I want to pass user name and id from php login page to angularjs controller onload.我想将用户名和 ID 从 php 登录页面传递到 angularjs controller onload。 i tried it by ng-init to call basicDetails(username, id).我尝试通过 ng-init 调用 basicDetails(username, id)。 this function trigger at end of main controller. and also another problem passed parameter to angularjs variable print passed value in inside basicDetails function, outside it shows value as empty这个 function 在主 controller 的末尾触发。还有另一个问题将参数传递给 angularjs 变量打印在 basicDetails function 内部传递的值,外部它显示值为空

<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主控制器.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);

}]);

As you said, ng-init runs after the rest of the controller code.如您所说, ng-init在 controller 代码的 rest 之后运行。 This is why you get undefined when you try to log it outside of basicDetails .这就是为什么当您尝试在basicDetails之外记录它时会得到undefined的原因。 It hasn't been set yet because basicDetails sets it later.它尚未设置,因为basicDetails设置它。

So run all of your initialization code inside of 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);    
  }
}}

You can rename it from basicDetails to something like init so it makes more sense.您可以将其从basicDetails重命名为类似init的名称,这样更有意义。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM