将 JSON ID 密钥插入 ng-click 指令,然后将其传递到另一个控制器

2024-03-16

应用程序的这一部分显示用户任务的最少信息。当他们单击“查看详细信息”按钮时,他们将进入一个页面,该页面包含有关基于 ID 的特定 CAR 的更多信息。

这是一张图片来帮助解释我正在谈论的第一部分:

这是我的角度代码:EDIT- 添加了 ui-router 代码

angular.module('ngApp', ['ui.router'])
.factory('authInterceptor', authInterceptor)
.constant('API', 'http://myserver.com/ecar/api')
.controller('task', taskData)
.controller('carDetails', carDetails)
.controller('myCars', myCars)

 // ** EDIT ** ADDED MY UI-ROUTER CODE
.config(function($httpProvider, $stateProvider, $urlRouterProvider){

  $urlRouterProvider.otherwise('/cars');      

  $stateProvider

  .state('cars', {
    url: '/cars',
    templateUrl: 'cars.html'
  })

  .state('carDetails', {
    url: '/carDetails',
    templateUrl: 'mycar_details.html',
    controller: 'carDetails'
  })

  .state('taskDetails', {
    url: '/taskDetails',
    templateUrl: 'task_details.html',
    controller: 'taskData'
  })
)}

function carDetails($scope, $http, API) {
  $http.get( API + '/car/**THE CAR ID**' ).
  success(function(data) {
    $scope.details = data;
    console.log(data);
  });
}

EDIT- 按钮 HTML:

<a ng-click="" ui-sref="carDetails">View Details</a>

正如您所看到的,每个 CAR 都有自己唯一的 ID(当然)。我可以使用以下方法显示 ID:

ng-repeat="task in mainTask.Tasks"

{{ task['CAR ID'] }} // in the html

但我需要这个来做两件事:

  1. 当用户单击“查看”按钮时,我需要它将他们带到另一个标题为 car_details.html 的页面。该页面将使用“carDetails”控制器,该控制器将显示 CAR 的所有信息。

  2. 当用户单击同一按钮时,我需要以某种方式获取该图块中显示的该 CAR ( {{ task['CAR ID'] }} ) 的特定 ID,然后以某种方式将其传递到该位置的 carDetails 函数:

    $http.get( API + '/car/汽车 ID' )

其中“THE CAR ID”需要将刚刚单击“查看详细信息”按钮的汽车的 ID 传递给它。这样,当 car_details.html 页面打开时,它将加载该汽车的所有正确内容。

EDIT- 路线在带有 ui-view 的主 html 文件中运行良好。但我只是不知道如何在单击各自的“查看详细信息”按钮时从每个图块 JSON ID 键传递唯一 ID。

我希望我已经说得足够清楚了。如果我还没有,请告诉我,我会尽力为您提供更多信息。

谢谢您的帮助!


(据我所知)有两种普遍接受的方法来处理这个问题。第一种、最流行、也是最强烈推荐的方法是使用服务或工厂。另一种是使用router和routeParams将卡的ID传递给细节控制器。

我不知道你打算如何显示你的详细信息页面(使用路由器导航到新页面,或者简单地隐藏/显示一些隐藏的 DOM 元素的指令),但是服务/工厂可以在这两种情况下使用,其中,routeParams 只能在其中使用。

(我还强烈建议您尽可能严格地遵循此处的角度风格指南:https://github.com/johnpapa/angular-styleguide/blob/master/a1/README.md https://github.com/johnpapa/angular-styleguide/blob/master/a1/README.md如果你想避免很多头痛)

angular.module('ngApp', [])
.service('CarDetailService', CarDetailService)
.controller('task', taskData)
.controller('carDetails', carDetails);

CarDetailService.$inject = ['$http', 'API'];
function CarDetailService($http, API) {
  var CarDetailService = this;
  CarDetailService.setCar = function(carId) {
    CarDetailService.carId = carId;
  };

  CarDetailService.getCar = function() {
    return $http.get(API + "/car/" + CarDetailService.carId);
  };
}

taskData.$inject = ['$scope', '$http', 'API', 'CarDetailService'];
function taskData($scope, $http, API, CarDetailService) {
  $http.get( API + '/tasks' ).
  success(function(data) {
    $scope.mainTask = data;
    console.log(data);
  });

  $scope.selectCar = function(carId) {
    CarDetailService.setCar(carId);
    $location.url('/car-details-route');  //go to details page
  };
}

carDetails.$inject = ['$scope', 'CarDetailService'];
function carDetails($scope, CarDetailService) {
  CarDetailService.getCar().success(function(details) {
    $scope.details = details;
  });
}

和你的ng-repeat看起来像这样:

<div ng-repeat="task in mainTask.tasks" ng-click="selectCar(task['Car ID'])">
  {{task['Car ID']}}
</div>

该服务是单例,这意味着 id 将在路由更改和控制器存在时持续存在。

另一种方法是使用 $routeParams。相关文档在这里:https://docs.angularjs.org/api/ngRoute/service/ https://docs.angularjs.org/api/ngRoute/service/$routeParams

$routeParams 允许您将 ID 添加到路由器读取并传递给控制器​​的路径中:

angular.module('ngApp', []).config(function($routeProvider) {

  $routeProvider.when('/car-details-route/:carId', {
    controller: 'carDetails',
    templateUrl: 'car-details.html'
  });

})
.controller('task', taskData)
.controller('carDetails', carDetails);


taskData.$inject = ['$scope', '$location'];
function taskData($scope, $location) {
  $http.get( API + '/tasks' ).
  success(function(data) {
    $scope.mainTask = data;
    console.log(data);
  });

  $scope.selectCar = function(carId) {
    $location.path('/car-details-route/'+carId); 
  };
}

carDetails.$inject = ['$scope', 'API', '$routeParams'];
function carDetails($scope, API, $routeParams) {
  $http.get(API + "/cars/" + $routeParams.carId).success(function(details) {
    $scope.details = details;
  });
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 JSON ID 密钥插入 ng-click 指令,然后将其传递到另一个控制器 的相关文章

随机推荐

  • 如何将linkedin api集成到Android应用程序中

    如何将 linkedin api 集成到我的应用程序中 None
  • badref 是什么意思?

    IR线是什么意思 define i32
  • 加载时时区返回 Uncaught TypeError 的时刻

    我正在努力将 Moment Timezone 实现到 Django 应用程序中 以便纠正从不同时区访问它的用户 并且在通过 Require js 导入文件时遇到错误 moment js moment timezone js 和 moment
  • 如何在 coinbase api 中导入转换?

    目前 Coinbase 支持所谓的 转换 允许从一种货币转换为另一种货币 例如 您可以将部分 BTC 转换为 XRP 在 CSV 中 它们在备注字段中返回买入和卖出金额 笔记 将 0 27235696 BTC 转换为 3 731 32313
  • HTML 名称标签

    是否可以使用标签for元素的属性name代替id 我们的应用程序存在一个错误 两个复选框具有相同的 id 单击一个复选框的标签会检查另一个复选框 由于 HTML 生成逻辑丑陋且复杂 更改 id 会很痛苦 但是 这两个复选框都有唯一的名称属性
  • javascript 中的 Math.random 如何实现随机性?

    javascript 中的 Math random 如何实现随机性 我做了一个可以从大约 50 个不同选项中随机选择的东西 我想知道使用 Math random 来获得随机性应该有多舒服 从规格来看 随机的 返回一个正数数值 符号 大于或等
  • 在容器中心添加面板

    我有一个JPanel这是一个BorderLayout我在顶部和容器中设置了一个新面板 JDesktopPane 位于中心 另一个面板位于底部 现在我想在容器中心动态设置面板 卡片布局 因为我在下面显示层次结构 top gt panel pa
  • jQuery html() 和换行符

    我使用 jQuery 和 Rails 并有以下代码 related html 我在浏览器中遇到问题 只有当部分中没有换行符时 才会替换 lated 元素的内容 这没什么大不了的 我可以将所有内容放在一行上 但这使代码非常难以阅读 有没有办法
  • 使用重命名替换文件名

    我想通过替换从 开始的所有字符后跟八个大写字母来重命名文件名 并仅保留扩展名 4585 10 148 H2A119Ub GTCTGTCA S51 mcdf mdup ngsFlt fm 4585 10 148 H3K27me3 TCTTCA
  • 通过 chrome.runtime.sendMessage 发送带有函数的对象

    我正在开发一个 chrome 扩展 我想用 chrome runtime sendMessage 发送一个对象 带有一些函数 现在做这样的事情 chrome runtime sendMessage something Funny 工作得很好
  • wget 只下载一个 index.html 文件,而不是其他大约 500 个 html 文件

    使用 Wget 我通常只收到一个 index html 文件 我输入以下字符串 wget e robots 关闭 rhttp www korpora org kant aa03 http www korpora org kant aa03
  • 在 maven-plugin-testing-harness 中注入 DefaultRepositorySystem 时出错

    我正在尝试基于现有 2 0 插件创建一个新的 Maven 3 0 3 插件 并促进 aether 获取一些依赖项 我尝试创建一个简单的测试来使用 maven plugin testing harness 版本 2 0 1 加载 mojo 但
  • Chrome 扩展:无法使 chrome.desktopCapture.chooseDesktopMedia 捕获窗口音频

    我正在尝试使用chrome desktopCapture chooseDesktopMediaAPI 用于从扩展窗口捕获音频 我从 popup js 页面发送捕获请求 显现 background scripts background js
  • 哪里与有

    为什么需要放置您自己创建的列 例如select 1 as number after HAVING并不是WHERE在 MySQL 中 不这样做有什么缺点吗WHERE 1 写出整个定义而不是列名 其他关于这个问题的回答都没有说到重点 假设我们有
  • 如何告诉继承类不要调用其基类的无参数构造函数?

    我惊讶地发现我的基类的无参数构造函数在我每次调用时都会被调用any派生类中的构造函数 我以为就是这样 base 是为了 为了明确地如果需要的话 可以调用基本构造函数 当我实例化派生类时 如何防止调用基构造函数 using System na
  • 使用 PHP 在 Mongo DB 文档中添加数据

    我想插入数据Mongo database使用 PHP 脚本 在year明智的文件 使其看起来像这样 所有年份都在一份文件中 cars 2017 car Motorolla color blue 2016 car Toyota color g
  • 自动完成未按预期渲染材质 UI

    我的自动完成组件正在从 API 中提取书籍列表 我将它们呈现为自动完成组件中的选项 并将它们输出为页面底部的列表以进行调试 还从 API 输出 JSON 两个问题似乎是交织在一起的 首先 自动完成选项似乎并不全是渲染 最多有 10 个结果
  • FileNotFoundException(未找到 DLL)

    我在一台客户的机器上遇到了奇怪的错误 它抛出 FileNotFoundException 但该 DLL 肯定就在 Executable 文件夹中 为什么找不到它 请指教 由于您没有包含完整的异常详细信息 心理调试是 32 位与 64 位不匹
  • jQuery 验证文本区域最大长度错误

    我正在使用 jQuery validate v 1 6 0 来验证我的表单 我的数据库字段之一限制为 1000 个字符 我向相应的文本区域添加了验证 如下所示 在我的页面标题中 我添加 form validate validate 在我的页
  • 将 JSON ID 密钥插入 ng-click 指令,然后将其传递到另一个控制器

    应用程序的这一部分显示用户任务的最少信息 当他们单击 查看详细信息 按钮时 他们将进入一个页面 该页面包含有关基于 ID 的特定 CAR 的更多信息 这是一张图片来帮助解释我正在谈论的第一部分 这是我的角度代码 EDIT 添加了 ui ro