如何处理从 ng-repeat 生成的列表单击并加载下一页

Posted

技术标签:

【中文标题】如何处理从 ng-repeat 生成的列表单击并加载下一页【英文标题】:How to handle item click on list generated from ng-repeat and load next page 【发布时间】:2014-12-23 14:23:39 【问题描述】:

我有一个使用 ng-repeat 生成的 html 列表。

<div ng-repeat="product in store.products">
  <a href="details.html">product.name</a>
</div>

列表的数据是从我的 app.js 中的 json 数组中获取的,格式如下:

var items = [
   
            "name": "Nexus 5",
            "size": "4.95 inches",
            "camera": "8 megapixels"    
   , 
   
            "name": "Nexus 6",
            "size": "6.0 inches",
            "camera": "13 megapixels"  
   
];

我想单击列表项并转到另一个页面,该页面显示来自同一 json 数组的相应详细信息。我怎么做?一直在尝试从列表中访问索引并使用它来加载下一页,但到目前为止还没有成功。我是 Angular 和 javascript 的新手。任何中间步骤都会很有帮助。

另外,请注意我正在使用锚标记处理单击列表。这是理想的方法吗?

【问题讨论】:

我对angularjs不是很熟悉,但是你不能在a标签的属性中保存一个item的值吗? 【参考方案1】:

请在此处查看演示http://plnkr.co/edit/qVEhc0KgKjklWCmqKJ4L?p=preview

HTML:

<!DOCTYPE html>
<html ng-app="plunker">

  <head>
    <meta charset="utf-8" />
    <title>AngularJS Plunker</title>
    <script>document.write('<base href="' + document.location + '" />');</script>
    <link rel="stylesheet" href="style.css" />
    <script data-require="angular.js@1.2.x" src="https://code.angularjs.org/1.2.25/angular.js" data-semver="1.2.25"></script>
    <script data-require="angular-route@1.2.16" data-semver="1.2.16" src="http://code.angularjs.org/1.2.16/angular-route.js"></script>
    <script src="app.js"></script>
  </head>

  <body >
   <div ng-view></div>
  </body>

</html>

JS:

var app = angular.module('plunker', ['ngRoute']);

app.config(function($routeProvider) 

  $routeProvider.when('/main', 
    templateUrl: "main.html",
    controller: "mainController"
  ).when('/detail/:productName', 
    templateUrl: "details.html",
    controller: "detailsController"
  ).otherwise(
    redirectTo: "/main"
  );
)
  .controller("mainController", function($scope, dataService) 
    $scope.store = ; //.products

    $scope.store.products = dataService.getProducts();
  )
  .controller("detailsController", function($scope, $routeParams, dataService) 


    $scope.product = dataService.getProductAt($routeParams.productName);

  );


angular.module("plunker").service("dataService", function(filterFilter) 
  var items = [
    "name": "Nexus 5",
    "size": "4.95 inches",
    "camera": "8 megapixels"
  , 
    "name": "Nexus 6",
    "size": "6.0 inches",
    "camera": "13 megapixels"
  ];

  this.getProducts = function() 
    return items;
  ;
  this.getProductAt = function(_name) 
    this.getProducts();
    return filterFilter(items, 
      name: _name
    )[0];
  ;
);

(你还需要 details.html 和 main.htm 模板)

【讨论】:

以上是关于如何处理从 ng-repeat 生成的列表单击并加载下一页的主要内容,如果未能解决你的问题,请参考以下文章

如何处理从 Undertow 工作线程抛出的异常?

Android:如何处理从右到左的滑动手势

如何处理从 Gdiplus::DrawArc 返回的零星 OutOfMemory 错误代码?

如何处理从 servlet 中的 Angular 应用程序发送的预检请求?

AngularJS - 如何处理 ng-repeat 与预先存在的项目

C#/JSON 如何处理从数据库查询返回的 NULL 值? [复制]