AngularJS为隐藏字段提供'undefined',PHP会话变量作为值



我发现了很多关于如何将隐藏的输入字段值传递给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会话变量。

有人有主意吗?

谢谢!

实现所需功能的第一种也是最简单的方法是基本上创建一个全局javascript变量并在PHP代码中设置值。这将被传递给控制器。在php页面中,您会看到:

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

在你的控制器里,你会看到一行字:

$scope.userId = serverVariable;

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

票据

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

还有一件事——这是最简单的,但远不是唯一的选择。您可以考虑在定义控制器的元素上使用"ng-init"指令。你可以在这里找到一个有答案的堆栈问题:你能在创建时将参数传递给AngularJS控制器吗?。同样,只需将服务器端的值传递到init例程中,所有内容都应该正确地传递到控制器!

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

angular.element

您可以使用angular.element来获取html元素,使用val可以在不绑定的情况下从元素中读取值。

在您的情况下,它将是:

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

ng初始化

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

在您的情况下,它将是:

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

最新更新