在 ng-click 中传递 php 变量是可以理解的,但是我如何通过 ng-click 函数传递完整的 php 对象我已经成功地通过它传递了 JavaScript 对象,但我无法传递 php 对象任何帮助将不胜感激。这是我的脚本:
<ul>
<!-- Retrieving of main products -->
<?
if(isset($products)):
foreach($products as $row):
?>
<li>
<a href="products/<?=$row->sub_c_id?>/<?=$row->pid?>" class="title colr"><?=$row->pname?></a>
<a href="products/<?=$row->sub_c_id?>/<?=$row->pid?>" class="thumb">
<img src="<?php echo base_url(); ?>uploads/<?=$row->product_pic?>" style="width:157px; height:181px;" alt="" />
</a>
<div class="prodbuttons">
<p class="price bold"><?=$row->pprice?></p>
<a class="cart upper" ng-click="addtocart(<?=$row->pid?>,'<?=$this->session->userdata('session_id'); ?>','<?=$row->pname?>',<?=$row->pprice?>,<?=$row->pquantity?>,<?=$row->sub_c_id?>,'<?=$row->product_pic?>','<?=$row->color?>','<?=$row->size?>',1)">Add to Cart</a>
<a ng-click="check(<? json_encode($row) ?>)">email me</a>
</div>
</li>
<? endforeach; endif; ?>
</ul>
我也尝试过这样的方法,但它也给了我错误:
<a ng-click="check(<? echo json_encode($row) ?>)">email me</a>
Angular js 脚本:
$scope.addtocart=function(pid,current_session_id,pname,pprice,pquantity,sub_c_id,product_pic,color,size,qty){
$scope.errors.splice(0, $scope.errors.length); // remove all error messages
$scope.msgs.splice(0, $scope.msgs.length);
$http.post('/product/ng_insertincart', { pid : pid, current_session_id : current_session_id, pname : pname, pprice : pprice, pquantity : pquantity,sub_c_id : sub_c_id,product_pic : product_pic,color : color,size : size, qty : qty}
).success(function(data, status, headers, config) {
if (data.msg != '')
{
$scope.msgs.push(data.msg);
console.log(data);
}
else
{
$scope.msgs.push(data.msg);
}
}).error(function(data, status) { // called asynchronously if an error occurs
// or server returns response with an error status.
$scope.errors.push(status);
});
}
$scope.check=function(argument) {
console.log(argument);
}
最佳答案
哎呀。由于您的客户以某种方式强制您这样做,那么至少将 php 内容移至您的 Angular Controller 。像这样的东西:
var controller = function()
{
<?php
// Convert product objects to array then encode as json
$items = array();
foreach($products as $product) {
$item = array(
'pid' => $product->pid,
'pprice' => $product->pprice,
...
$items[] = $item;
}
$productsJson = json_encode($items);
?>
$scope.products = angular.fromJson('<?php echo $productsJson; ?>');
现在您的 Controller 中有一个合适的产品数组,您可以在模板中使用良好的 ole ng-repeat。但即使 $products 到 json 字符串的转换也不需要在模板中完成。在您的主 php 代码中执行此操作,然后将字符串传递给模板。还有序列化器可以帮助将 php 对象转换为数组:http://symfony.com/doc/current/components/serializer.html
关于javascript - 如何在 ng-click 中传递 php 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29422951/