ng-init запускает функцию в конце angularjs контроллера - PullRequest
0 голосов
/ 24 апреля 2020

Я хочу передать имя пользователя и идентификатор со php страницы входа в систему angularjs загрузка контроллера. я попытался это с помощью ng-init для вызова basicDetails (имя пользователя, идентификатор). эта функция запускается в конце основного контроллера. а также другая проблема, передаваемая параметру в angularjs переменная печать переданного значения внутри функции basicDetails, снаружи она показывает значение как пустое

<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);

}]);

1 Ответ

2 голосов
/ 24 апреля 2020

Как вы сказали, 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, так что это имеет больше смысла.

...