2016-10-06 11 views
0

Ich arbeite in MEAN-Stack. Für mein Frontend versuche ich Daten eines einzelnen Artikels aus meiner Artikelliste mit eckigen zu rendern. Wenn ich auf das Element klicke, ändert sich die URL auf eine andere als die von mir festgelegte und ich erhalte die Daten nicht. Ich konnte dies erst nach dem Debugging-Modus sehen. Die erwartete Verbindung ist /item/:itemid aber ich bin immer /item/partials/item.html ich die folgenden Dateien verwendet:falsche Link in angularJs

main.route.js (mit Problem nur Route gezeigt)

function config($routeProvider, $locationProvider) { 
$routeProvider 
    .when('/item/:itemid', { 
     templateUrl: 'partials/item.html', 
     controller: 'productCtrl', 
     controllerAs: 'vm' 
    }) 
    .otherwise({redirectTo: '/'}); 

    $locationProvider.html5Mode({ 
     enabled: true, 
     requireBase: false 
    }); 
}; 

myData.service.js

angular 
    .module('myApp') 
    .service('myData', myData); 

function myData ($http) { 
    var itemById = function (itemid) { 
     return $http.get('/api/items/' + itemid); 
    }; 

    return { 
     itemById : itemById 
    }; 
} 

product.controller.js

angular 
    .module('myApp') 
    .controller('productCtrl', productCtrl) 

function productCtrl($routeParams, myData) { 
    var vm = this; 
    vm.itemid = $routeParams.itemid; 

    myData.itemById(vm.itemid) 
     .success(function(data) { 
      vm.data = { item : data }; 
      vm.pageHeader = { 
       title: vm.data.item.name 
      }; 
     }) 
     .error(function (e) { 
      console.log(e); 
     }); 
}; 

items.html (Link auf einzelne Artikelseite)

<a href='/#/item/{{ item._id }}'>{{ item.name }}</a> 

item.html

<div ng-controller='productCtrl'> 
    <div class='container'> 
     <page-header content='vm.pageHeader.title'></page-header> 
    </div> 
</div> 

Verzeihen Sie mir, wenn die Frage nicht viel Sinn macht, wie ich bin neu dazu. Danke im Voraus!

+0

Dies ist genau das, warum Angular empfiehlt Dir einen '' bei der Verwendung von HTML5-Modus. Ihre 'templateUrl' wird relativ zum aktuellen URL-Pfad geladen, der'/item' ist. – Phil

+0

Verwenden Sie nicht 'ng-controller' mit Routing. Sie setzen den Controller bereits in der Routenkonfiguration – Phil

+0

Vielen Dank. Es funktionierte –

Antwort

0

den Schrägstrich auf diesem Anker entfernen unter:

<a href='#/item/{{ item._id }}'>{{ item.name }}</a>

+0

Ohne diesen Schrägstrich, macht die Verbindung keinen Sinn, da ich für SPA gehe. –

+0

Nur der erste Schrägstrich meinte ich, nicht alle Schrägstriche – Kerisnarendra

+0

Wenn ich den ersten Schrägstrich entfernen, wird die URL 'http: // localhost: 3000/items #% 2Fitem% 2F57e860e5527a3a04e80dec80' –

Verwandte Themen