2015-04-16 15 views
5

Sono un principiante di AngularJS e ho la seguente domanda. Sto giocando con il modulo ngRoute e questo è il mio codice finora:Angular ngRoute - Impossibile ottenere la pagina se inserisci manualmente l'url

html:

<nav ng-controller="navController as nav"> 
    <ul> 
     <li ng-repeat="item in navItems"> 
      <a href="{{ item.url }}">{{ item.name }}</a> 
     </li> 
    </ul> 
</nav> 


<div id="main"> 
    <div ng-view></div> 
</div> 

app.js

(function(window) { 

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

    app.config(['$routeProvider', '$locationProvider', function($routeProvider, $locationProvider) { 
     $routeProvider 
      .when('/', { 
       templateUrl : 'pages/home.html', 
       controller : 'mainController' 
      }) 
      .when('/contact', { 
       templateUrl : 'pages/contact.html', 
       controller : 'contactController' 
      }); 

     if (window.history && window.history.pushState) { 
      $locationProvider.html5Mode(true); 
     } 
    }]); 


    app.controller('mainController', ['$scope', function($scope) { 
     $scope.message = 'Hello from home page'; 
    }]); 


    app.controller('contactController', ['$scope', function($scope) { 
     $scope.message = 'Hello from contact page'; 
    }]); 

    app.controller('navController', ['$scope', function($scope) { 
     $scope.navItems = [ 
      { name: 'Home', url: '/' }, 
      { name: 'Contact', url: '/contact' } 
     ]; 
    }]); 

})(window); 

e funziona benissimo. Menu di rendering angolari e quando faccio clic sul collegamento mi mostra la pagina desiderata. Ma tranne nel caso seguente. Quando viene visualizzata la home page (url: http://localhost:3000) e aggiungo manualmente all'indirizzo URL "/ contact", viene visualizzata una pagina vuota con errore "Impossibile ottenere/contattare". Qualcuno potrebbe spiegarmi perché questo sta accadendo e come posso risolverlo? Gradirei qualsiasi aiuto. Grazie.

+0

tenta di aggiungere #/contatto – Reena

+0

significhi per l'url? Sì, allora funziona. Ma probabilmente l'utente non digiterà #/contact;] Molto probabilmente non dovrei preoccuparmi affatto di questo, ma sono curioso di sapere se c'è una soluzione per questo. – covfefe

+0

Si voleva essere digitato manualmente ?? – Reena

risposta

-1

Infatti, è necessario il # (hashtag) per i browser non HTML5.

In caso contrario, eseguiranno semplicemente una chiamata HTTP al server al suddetto href. # È un vecchio cortocircuito del browser che non attiva la richiesta, il che consente a molti frameworks js di creare il proprio reindirizzamento del client in più.

È possibile utilizzare $ locationProvider.html5Mode (true) per indicare a angular l'utilizzo della strategia HTML5, se disponibile.

Ecco l'elenco dei browser che supporti HTML5 strategia: http://caniuse.com/#feat=history

Fonte: AngularJS routing without the hash '#'

Problemi correlati