【问题标题】:angularjs gives 'undefined' for hidden field with php session variable as valueangularjs为隐藏字段提供“未定义”,以php会话变量为值
【发布时间】:2014-02-01 22:53:21
【问题描述】:

我找到了很多关于如何将隐藏的输入字段值传递给 angularjs 脚本的资源,但如果该值是从 php 会话中读取的,则不是。

这是我的html代码:

    <div ng-controller="ImgCtrl">
      <input type="hidden" ng-model="uid" value="<?=$_SESSION["uid"];?>" >
      <input type="file" ng-file-select="onFileSelect($files)" >
      <br/>
      <span>{{ message }}</span>
    </div>

我也试过这样:

    <input type="hidden" ng-model="uid" value="{{<?=$_SESSION["uid"];?>}}" >

编辑 处理它的 angularjs 代码是:

var ImgCtrl = [ '$scope', '$upload', function($scope, $upload) {
  $scope.onFileSelect = function($files) {
    for (var i = 0; i < $files.length; i++) {
      var file = $files[i];
      $scope.upload = $upload.upload({
        url: 'image_upload.php', 
        method: 'POST',
        data: {
            'uid': $scope.uid
        },
        file: file
      }).success(function(data, status, headers, config) {
        $scope.message = data;
      }).error(function(data, status) {
         alert(data);
      });
    }
  };
}];

这是我找到的答案之一,但我似乎找不到如何在 angularjs 中读取 php 会话变量。

有人有想法吗?

谢谢!

【问题讨论】:

  • 您是在尝试将值传递给控制器​​还是指令? (换句话说,你在用这个值做什么?)
  • 我添加了必须处理隐藏值的角度代码...

标签: php html angularjs


【解决方案1】:

第一个也是最简单的方法是创建一个全局 javascript 变量并在 PHP 代码中设置值。然后,这将传递给控制器​​。在 php 页面中,您将拥有:

<script>var serverVariable=<?=$_SESSION["uid"];?>;</script>

在您的控制器中,您会看到以下内容:

$scope.userId = serverVariable;

之后,您可以在任何您想要的范围内使用 userId,它会起作用!这里有一个 plunker 演示:http://plnkr.co/edit/7xEGM0Rz80TJQc0kPBwz?p=preview

备注

所以,当然,最简单的事情并不总是最好的事情。首先,如果您在客户端传递用户 ID - 无论是在隐藏变量中还是在 javascript 全局 客户端可以操纵您的值。您不想依赖客户端在您的“post”或“put”中返回的任何内容 - 而是您应该使用您在会话中存储的值。对于任何敏感值,这都是一个非常好的经验法则。

另一件事 - 这是最简单的,但远非唯一的选择。您可以考虑在定义控制器的元素上使用“ng-init”指令。您可以在此处找到带有该答案的堆栈问题:Can you pass parameters to an AngularJS controller on creation?。同样,只需将服务器端的值传递到您的 init 例程中,所有内容都应该正确传递给控制器​​!

我希望我的回答至少能让你走上正轨。祝你好运!

【讨论】:

  • 我在想一些关于全局变量的事情,然后我完全忘记了它,感谢就像一个魅力!
【解决方案2】:

angular.element

您可以使用angular.element 获取一个html 元素,使用val 您可以从元素中读取值而无需绑定。

在你的情况下是:

<input type="hidden" id="uid" value="<?=$_SESSION["uid"];?>" >
angular.element("#uid").val();

ng-init

使用ng-init,您可以使用您想要的值初始化您想要的模型。

在您的情况下,它将是:

<div ng-controller="ImgCtrl" ng-init="uid = <?=$_SESSION["uid"];?>" >

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-18
    • 2014-06-16
    • 2020-08-17
    • 1970-01-01
    • 1970-01-01
    • 2011-10-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多