【问题标题】:AngularJS $stateParams - Data not passing between statesAngularJS $stateParams - 数据不在状态之间传递
【发布时间】:2017-09-04 10:26:35
【问题描述】:

我正在使用 $stateParams 和 Angular ui-router 在单击员工列表中的员工时将 json 对象的 id 属性传递给 url,以便他们的数据显示在员工详细信息页面中。

url 路由似乎正在工作,因为员工 id 已成功显示在 url 中,但数据没有从员工列表传递到员工详细信息状态。员工存储在控制器“employeesListController”中的json对象中,处于“employees/employeesList”状态,我需要单击员工的详细信息以“employees/employeeDetails”状态显示在控制器“employeeDetailsController”中。

我得到的 url 扩展示例(因此路由正确):/employees/employeeDetails/21101994

我查看了 $state.go,但无法理解如何将它实现到这段代码中,因为我找不到一个全面的实际示例。

州:

.state('employees/employeesList', {
    url: '/employees/employeesList',
    templateUrl: 'pages/employees/employeesList.html',
    controller: 'employeesListController'
})

.state('employees/employeeDetails', {
    url: '/employees/employeeDetails/:employeeId',
    templateUrl: 'pages/employees/employeeDetails.html',
    controller: ('employeesDetailsController', ['$scope', '$stateParams', function($scope, $stateParams) {
        $scope.employeeId = $stateParams.employeeId;
    }])
})

-

'employeesListController':

app.controller('employeesListController', function($scope) {
$scope.active = 'active';

$scope.sortByAllDepartments = '+lastName';

var employees = [
    {
        id: '21101994',
        firstName: 'Employee',
        lastName: 'One'
    },
    {
        id: '22071958',
        firstName: 'Employee',
        lastName: 'Two'
    },
];

$scope.employees = employees;
})

-

HTML 包括。 ui-sref 链接:

<li class="collection-item col-xs-12" data-ng-repeat="employee in employees | orderBy: sortByAllDepartments | filter:searchAllDepartments">

    <a ui-sref="employees/employeeDetails({employeeId: employee.id})" class="employeeLink"></a>

        <div>

            <p data-ng-show="employee.firstName || employee.lastName" class="title">{{employee.firstName}} {{employee.lastName}}</p>

            <p data-ng-show="!employee.firstName" class="title">(No Data)</p>

            <p data-ng-show="!employee.lastName" class="title">(No Data)</p>

etc......

【问题讨论】:

  • 您如何在列表页面中获取员工的价值?您只是将employeeId 发送到详细信息页面。是否可以从id中获取员工的详细信息?
  • 我已经展示过了。列表页,使用employeesListController控制器,对列表项使用ng-repeat来绑定数据
  • 但是如何在详细信息页面中获取员工的详细信息?您显示的是列表页面。
  • 我明白了。我刚刚使用 javascript 选择器(例如:

    {{employee.firstName}}

    )等以相同的方式访问了数据属性。
  • 您的详细信息控制器无权访问名称等...您传递给详细信息控制器的唯一内容是employeeId。你是如何从 id 中获取 firstName 的?

标签: javascript angularjs json routing angular-ui-router


【解决方案1】:

employees/employeeDetails 的控制器声明错误。应该是这样的:

.state('employees/employeeDetails', {
    url: '/employees/employeeDetails/:employeeId',
    templateUrl: 'pages/employees/employeeDetails.html',
    controller:  function($scope, $stateParams) {
        $scope.employeeId = $stateParams.employeeId;
    })
})

如果你需要一个命名控制器,你可以通过创建一个新的控制器来实现:

app.controller('employeeDetailsController', function($scope, $stateParams) {
        $scope.employeeId = $stateParams.employeeId;
})

在你的状态配置中:

.state('employees/employeeDetails', {
    url: '/employees/employeeDetails/:employeeId',
    templateUrl: 'pages/employees/employeeDetails.html',
    controller: 'employeeDetailsController
})

Official Documentation

【讨论】:

  • 这会删除命名为 'employeeDetailsController' 的控制器,也不起作用
  • 您发布的代码中没有名称为employeeDetailsController 的控制器。以任何方式查看命名控制器的更新答案。
猜你喜欢
  • 2015-03-30
  • 1970-01-01
  • 2015-09-25
  • 1970-01-01
  • 2017-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-11
相关资源
最近更新 更多