2017-05-19 4 views
0

J'utilise AngularJS 1.6.4. J'ai un serveur filé @ 8080 port (juste en veillant à ne rien manquer). Voici mon code:Routage en AngularJS ne fonctionne pas sans! (AveC#! Ça marche)

app.js

//Defines the root module, initialize with additional dependencies 
angular.module("MyPhoneApp", ['ngRoute']); 
angular.module("MyPhoneApp").component('greetUser', { 
    template: 'Hello, {{$ctrl.user}}!', 
    controller: function GreetUserController() { 
     this.user = 'world'; 
    } 
}); 

angular.module("MyPhoneApp").component('phoneList', { 
    templateUrl: 'app/phoneList.template.html', 
    controller: ['$http', function PhoneListController($http){ 
     var self = this; 
     self.criteria = "model"; 
     $http.get("app/phones.json").then(function(response){ 
      self.phones = response.data; 
     }); 
    }] 
}); 

//Code for phone-detail snippet 
angular.module("MyPhoneApp").component('phoneDetail', { 
    template: 'Hello world from Phone Detail component! {{$ctrl.phoneId}}', 
    controller: ['$routeParams', 
     function PhoneDetailController($routeParams) { 
      this.phoneId = $routeParams.phoneId; 
     } 
    ] 
}); 


//Routing code, to be seperated in different file named app.config.js 
angular.module("MyPhoneApp").config(['$locationProvider', '$routeProvider', 
    function config($locationProvider, $routeProvider) { 
     $locationProvider.hashPrefix("!"); 
     $locationProvider.html5Mode({ 
      required : true, 
      requireBase : false 
     }); 
     $routeProvider.when('/phones', {template:'<phone-list></phone-list>'}) 
         .when('/phones/:phoneId', {template: '<phone-detail></phone-detail>'}) 
         .otherwise('/phones'); 
    } 
]); 

phoneList.template.html

<input type="text" class="form-control" ng-model="$ctrl.query" placeholder="Search Phones"><br/> 
<select name="type" id="" ng-model="$ctrl.criteria" class="form-control" placeholder="Select Filter Criteria"> 
    <option value="maker" >By Manufacturer</option> 
    <option value="model">By Model</option> 
</select> 
<ul type="none"> 
    <li ng-repeat="phone in $ctrl.phones | filter:$ctrl.query | orderBy:$ctrl.criteria" class="panel panel-success"> 
     <a href="#!/phones/{{phone.id}}" class="thumb"> 
      <img ng-src="{{phone.image}}" alt="{{phone.model}}" height="180px" width="150px"/> 
     </a> 
     <a href="#!/phones/1"> 
      {{phone.maker}} : {{phone.model}} 
     </a><br/> 
     {{phone.desc}} 
    </li> 
    <li> 
     Number of phones : {{$ctrl.phones.length}} 
    </li> 
</ul> 
<pre>{{$ctrl.phones | filter:$ctrl.query | orderBy:$ctrl.criteria | json}}</pre> 

et index.html

<html> 

<head> 
    <title>First AngularJS App</title> 
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" /> 
    <base href="/"/> 
</head> 

<body ng-app="MyPhoneApp"> 
    <div class="container"> 
     <div class="row"> 
      <div class="col-md-offset-2 col-md-8 col-md-offset-2"> 
       <div ng-view></div> 
      </div> 
     </div> 
    </div> 
</body> 
<script src="https://code.jquery.com/jquery-3.2.1.min.js"></script> 
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script> 
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.4/angular.min.js"></script> 
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.6.4/angular-route.min.js"></script> 
<script src="app/app.js"></script> 
</html> 

Le problème est que chaque fois que je dois placer des liens, j'ai e pour les mettre avec "#!/someplace/somevalue" et non "#/someplace/somevalue" (notez l'exclaimation après hash) pour que le routage fonctionne. En utilisant le tutoriel officiel AngularJS pour cela, je pense qu'il y a quelque chose qui me manque. Activé html5Mode également pour une certaine facilité, mais dans ce cas également besoin de mettre # sur. Qu'est-ce que j'oublie ici?

Répondre