$ stateParams作为数组进入,但如何转换为字符串?

时间:2017-10-22 22:20:19

标签: angularjs

我正在尝试执行Master-Detail Page 我使用$ stateParams.id来提供详细数据。

问题是$ stateParams.id作为数组返回。

这意味着, 如果数据如下:
{id:1,姓名:'James'},{id:2,姓名:'John'}

$ stateParams.id为1 时,

然后返回的数据为 ID:2。不是ID:1 ,因为它作为数组返回,并被选为数组[1]。

我认为这是因为PHP将数据作为array()返回。

我不知道在哪里修复:AngularJS还是PHP? (或者我可能错了!) 你会修复哪一个?请告诉我。


[controller.js]

function ProjectCtrl($scope, $http, $timeout, $state, $stateParams, $location) {

  $http.post("../crud/projects_read.php", {
    })
    .then(function(response){
        $scope.projects = response.data;
        $scope.project_data = $scope.projects[$stateParams.id];
    });
  };

[config.js]

.state('pjt.project_detail', {
        url: "/project_detail/{id}",
        templateUrl: 'views/project_detail.html',
        data: { pageTitle: 'Project detail' },
        controller: 'ProjectCtrl',
    })

[projects_read.php]

<?php
require_once 'connect.php';
    $query = $conn->query("SELECT * FROM `projects`") or die(mysqli_error());
    $data = array();
    while($row = $query->fetch_assoc()){
        $data[] = $row;
    }
}
echo json_encode($data);
?>

我的目标是: $ stateParams.id将数据的id号匹配为字符串,而不是数组。

提前感谢您的支持!

1 个答案:

答案 0 :(得分:0)

要确定问题是与AngularJS还是PHP有关,请提供PHP脚本提供的完全响应?

如果PHP脚本将数据作为单个 JSON对象返回为

{id: 1, name:'James'}, {id:2, name:'John'}

而不是

的JSON对象的序列/数组
[{id: 1, name:'James'}, {id:2, name:'John'}]

然后你必须在PHP脚本中进行一些更改。

如果我们说这是罪魁祸首,那么错误可能是合理的,但在你提供确切的php响应之前我们不能肯定地说出任何事情。

如果响应是JSON对象的数组,那么错误可能是错误的。

回想一下,为了访问项目ID#2 的数据,我们必须引用索引为1的响应数组,因为javascript数组索引 0-based

因此$scope.projects[1]将返回{id: 2, name: "John"}$scope.projects[0]将返回'{id: 1, name: "James"}'

如果是这种情况,那么我建议更改PHP脚本,以便您没有获得整个项目列表,只能获得您想要的项目

您可以通过将项目ID传递给通过AngularJS进行的POST调用中的PHP脚本,然后使用MySQL查询中的id来获取特定的项目详细信息来完成此操作。

希望我帮助过。