Страница сведений об элементе с использованием angularjs $routeParams

Я создаю интернет-магазин с angularjs, и мне трудно понять, как связать с details.html и отображать детали конкретных элементов. В настоящее время, когда я нажимаю на URL-адрес кнопки просмотра, отображается название элемента. Единственный способ, которым я могу это показать, — это сделать такую ​​ссылку: #/details/:{{item.name}}. Все, что я читал в Интернете, говорит, что это должно быть #/details/:name, но это возвращает :name в URL-адресе, а не details/:Macbook Pro в качестве примера. Если я сделаю это правильно, он перенаправит обратно на домашнюю страницу. Вот мой код до сих пор.

app.js

var myApp = angular.module('app', ['ngRoute']);
myApp.config(['$routeProvider','$locationProvider', function($routeProvider,$locationProvider) {
        $routeProvider.
        when('/home',{
            templateUrl: 'partials/home.html',
            controller: "storeCtrl"
        }).
        when('/about',{
            templateUrl: 'partials/about.html',
            controller: "storeCtrl"
        }).
        when('/computers',{
            templateUrl: 'partials/computers.html',
            controller: "storeCtrl"
        }).
        when('/smartphones',{
            templateUrl: 'partials/smartphones.html',
            controller: "storeCtrl"
        }).
        when('/tablets',{
            templateUrl: 'partials/tablets.html',
            controller: "storeCtrl"
        }).
        when('/details/:{{item.name}}',{
            templateUrl: 'partials/details.html',
            controller: "storeCtrl"
        }).

        otherwise({
            redirectTo: '/home'             
        });
    }]);

myApp.controller('storeCtrl', ['$scope', '$http', '$routeParams',  function($scope, $http, $routeParams) {


$scope.homeHeading = 'All Products';
$scope.aboutHeading = 'About Us';
$scope.computersHeading = 'Computers';
$scope.smartphonesHeading = 'Smartphones';
$scope.tabletsHeading = 'Tablets';

$http.get('js/products.json').then(function(result) {
    $scope.products = result.data;


});

$scope.minusOne = function(index) { 
    $scope.products[index].dislikes += 1; 
};
$scope.plusOne = function(index) { 
    $scope.products[index].likes += 1; 
};





}]);  

компьютеры.html

<div>
<h1>{{computersHeading}}</h1>

<div class="product col-md-4" ng-repeat="item in products | filter:search   | filter:'Laptop'">
<img ng-src="{{ item.cover }}" >
<h3>{{ item.name }}</h3>
<p class="price">{{ item.price }}</p>
<p class=""> <b>Storage</b>: {{ item.specs.storage }}</p>
<p> <b>Memory</b>: {{ item.specs.memory }}</p>

<!----- Save ratings for details page 
<div class="rating">
    <p class="likes" ng-click="plusOne($index)">
    <i class="fa fa-thumbs-up"></i>
    {{ item.likes }} </p>
    <p class="dislikes" ng-click="minusOne($index)"><i class="fa fa-thumbs-down"></i> {{ item.dislikes }} </p>

</div> -->
<a href="#/details/:{{item.name}}" class="btn btn-custom"> View Product</a>

</div>

</div>

Опять же, единственный способ отобразить имя элемента в URL-адресе — это указать скобки в URL-адресе, и я знаю, что это неправильно. Любая помощь будет принята с благодарностью.


person Travis Davis    schedule 04.07.2016    source источник


Ответы (1)


Я понял, мне нужно было сделать контроллер для страницы сведений, а затем получить данные json. Затем я изменил свою ссылку href на

<a href="#/details/{{products.indexOf(item)}}" class="btn btn-custom"> View Product</a>
person Travis Davis    schedule 04.07.2016