我发现了很多关于如何将隐藏的输入字段值传递给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"];?>" >