【问题标题】:ng-init trigger a function at end of angularjs controllerng-init 在 angularjs 控制器末尾触发一个函数
【发布时间】:2020-08-08 06:27:26
【问题描述】:

我想将用户名和 id 从 php 登录页面传递到 angularjs 控制器 onload 。我通过 ng-init 尝试调用 basicDetails(username, id) 。此功能在主控制器结束时触发。还有另一个问题将参数传递给 angularjs 变量 print 在 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>

主控制器.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】:

正如您所说,ng-init 在控制器代码的其余部分之后运行。这就是为什么当您尝试在basicDetails 之外记录它时得到undefined 的原因。尚未设置,因为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 之类的名称,这样更有意义。

【讨论】:

  • 它的工作原理。但是我所有的代码都在函数内部是好的做法吗?
  • 我尝试了隐藏文件,但不起作用。为什么两种方式绑定不起作用?
  • 这都是初始化的一部分,所以是的,如果您想通过ng-init 传递它,这是唯一的做法。如果您有其他不依赖于在编译时设置的logedUseritemsNo 的控制器代码,它将超出该函数。
  • 我没有看到带有绑定或隐藏输入字段的代码。听起来这可能是一个单独的问题。
猜你喜欢
  • 2015-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-13
  • 2014-08-04
相关资源
最近更新 更多