【问题标题】:Angular - select object from JSON data through $routeParamsAngular - 通过 $routeParams 从 JSON 数据中选择对象
【发布时间】:2016-05-10 10:19:53
【问题描述】:

我正在尝试显示我的 json 文件中的数据,如下所示:

[
  {
    "category":"category1",
    "link":"category1",
    "expand":false,
    "keyword":"category1, category1 online, category1 something"
  },
  {
    "category":"category2",
    "link":"category2",
    "expand":false,
    "keyword":"category2, category2 online, category2 something"
  }
]

我还在控制器中使用 $routeProvider:

var myApp = angular.module('myApp', [
    'ngRoute',
    'MyControllers'
]);

myApp.config(['$routeProvider', function ($routeProvider) { 
    $routeProvider.when('/:itemName', {templateUrl: function(param){ 
        return'partials/'+ param.itemName +'.html';
    }, controller: 'ContentCtrl'});
    $routeProvider.otherwise({redirectTo: '/category1'});
}]);

var MyControllers = angular.module('MyControllers', ['ngAnimate']);

MyControllers.controller('ContentCtrl', ['$scope', '$http', '$routeParams', function($scope, $http, $routeParams) {
    $http.get('js/data.json').success(function(data){
        $scope.meta = data;
        $scope.whichItem = $routeParams.itemName.indexOf()+1;
  });
}]);

最后是模板:

<html ng-app="myApp">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    <section ng-view>
        <h1>{{meta[whichItem].h1}}</h1>
    </section>
</body>
</html>

所以问题是参数$whichItem 总是返回0 作为值。例如,当我将路由更改为 /category2 并显示来自 json 数据的相同关键字时,它不想重新加载。这有什么问题?

【问题讨论】:

  • String.prototype.indexOf() indefOf('What?") 在 IndexOf 方法中添加您要查找的内容
  • 好的。我正在尝试这个: $scope.whichItem = $routeParams.itemName.indexOf()+1;因为 routeparam 的正常值不起作用: $scope.whichItem = $routeParams.itemName;
  • 有效的是:{{meta[0].h1}} 和 {{meta[1].h1}} 然后我从 category1 和 category2 中获取关键字。 {{meta[whichItem].h1}} 不起作用!

标签: javascript arrays angularjs json ngroute


【解决方案1】:

您似乎想要获取itemName 的最后一个字符,它是一个整数,并使用该整数来确定要从 JSON 数组中获取的正确对象。

当应用程序被路由到category2 时,itemNamecategory2。这意味着要从 JSON 数组中获取的对象是第二个;数组中索引1 处的对象。

您可以通过在最后一个索引处对字符串进行切片并将其转换为整数来获得它。

$scope.whichItem = parseInt($routeParams.itemName.slice(-1), 10) - 1;

【讨论】:

  • 一点也不。我正在尝试使用 $scope.whichItem = $routeParams.itemName 作为索引来从 JSON 中获取适当的值,在此示例中为:关键字。所以我正在使用 {{meta[whichItem].keyword}} 但它没有获取任何东西......
  • 我正在尝试您的方法,但它似乎不起作用。也许是因为 parseInt()?
  • 你能检查 $routeParams 的值吗?你可以使用console.log
  • 我的意思是控制器中的console.log($routeParams)
  • 您输入的行是否与我写的完全一样?我看不出有什么问题。如果您需要对其进行测试,请在控制台中输入:var $routeParams = { itemName: 'category1' }; parseInt($routeParams.itemName.slice(-1), 10) - 1; 您应该得到正确的值 0
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-14
  • 1970-01-01
相关资源
最近更新 更多