2017-05-22 3 views
0

Ich folgte ein Tutorial zu AngularJS und ein weiteres Tutorial über Angular Material. Ich wollte jetzt Angular Material in meinem AngularJS-Projekt verwenden.ngMaterial und ngRoute Together Break App

Allerdings habe ich gefunden, sobald ich 'ngMaterial' zu den Abhängigkeiten die App bricht. Ich benutze Brackets, um es live zu sehen, und natürlich jedes Mal, wenn ich nach dem Hinzufügen von 'ngMaterial' auf Speichern klicke, bricht es ab. Ich habe versucht, zu ändern, wenn ich es injiziere sowie die Reihenfolge der Ladung in der HTML-Datei ändern.

Unten ist der Code für die HTML, app.js und controller.js. Ich schätze jede Anleitung!

--EDIT-- Ich fügte den Konsolenfehler wie unten beschrieben hinzu. Bitte beachten Sie, wenn ich ngMaterial von meiner app.js entferne, dann gibt es keine Konsolenfehler.

HTML

<!DOCTYPE html> 
<html lang="en" ng-app="myApp"> 
<head> 
<meta charset="utf-8"> 
<title>Angular Material</title> 
<!-- MATERIAL STYLESHEET --> 
<link rel="stylesheet" href="//rawgit.com/angular/bower-material/master/angular-material.css"> 

<!-- AngularJS Libraries --> 
<script src="lib/angular/angular.min.js"></script> 
<script src="lib/angular/angular-animate.min.js"></script> 
<script src="lib/angular/angular-route.min.js"></script> 


<!-- Your application bootstrap --> 
<script src="js/app.js"></script> 
<script src="js/controllers.js"></script> 

<!-- Angular Material Library --> 
<script src="http://ajax.googleapis.com/ajax/libs/angular_material/1.1.0/angular-material.min.js"></script> 

<!-- ICON SET --> 
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular-material-icons/0.7.1/angular-material-icons.min.js"></script> 

</head> 

<body> 
    <div class="main" ng-view> 

    </div> 
</body> 

</html> 

app.js

var myApp = angular.module('myApp', [ 
    'ngMaterial', 
    'ngRoute', 
    'artistControllers' 

    ]); 

myApp.config(['$routeProvider', function($routeProvider) { 
    $routeProvider. 
    when('/list', { 
    templateUrl: 'partials/list.html', //The actual library link 
    controller: 'ListController' 
    }). 
    when('/details/:itemId', { 
    templateUrl: 'partials/details.html', 
    controller: 'DetailsController' 
    }). 
    otherwise({ 
    redirectTo: '/list' 
    }); 
}]); 

controllers.js

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

artistControllers.controller('ListController', ['$scope', '$http', function($scope, $http){ 
    $http.get('js/data.json').success(function(data) { 
    $scope.artists = data; 
    $scope.artistOrder = 'name'; 
    }); 
}]); 

artistControllers.controller('DetailsController', ['$scope', '$http','$routeParams', function($scope, $http, $routeParams){ 
    $http.get('js/data.json').success(function(data) { 
    $scope.artists = data; 
    $scope.whichItem = $routeParams.itemId; //$routeParams looks at the parameters in when(). In This case it's when on details:ItemId in the app.js file. Specifies which page to route to on a click. 

    //Slider 
    if ($routeParams.itemId > 0){ 
     $scope.prevItem = Number($routeParams.itemId)-1; //Need number so it doesn't become string 
    }else{ 
     $scope.prevItem = $scope.artists.length-1; 
    } 

    if ($routeParams.itemId < $scope.artists.length-1){ 
     $scope.nextItem = Number($routeParams.itemId)+1; 
    }else{ 
     $scope.nextItem = 0; 
    } 

    }); 
}]); 

KONSOLE ERROR

Uncaught Error: [$injector:modulerr] http://errors.angularjs.org/1.2.9/$injector/modulerr?p0=myApp&p1=Error%3A%2…%2Flocalhost%2Fangularmaterial%2Flib%2Fangular%2Fangular.min.js%3A32%3A232) 
    at http://localhost/angularmaterial/lib/angular/angular.min.js:6:449 
    at http://localhost/angularmaterial/lib/angular/angular.min.js:30:1 
    at Array.forEach (native) 
    at q (http://localhost/angularmaterial/lib/angular/angular.min.js:7:274) 
    at e (http://localhost/angularmaterial/lib/angular/angular.min.js:29:115) 
    at $b (http://localhost/angularmaterial/lib/angular/angular.min.js:32:232) 
    at c (http://localhost/angularmaterial/lib/angular/angular.min.js:17:431) 
    at Zb (http://localhost/angularmaterial/lib/angular/angular.min.js:18:140) 
    at Tc (http://localhost/angularmaterial/lib/angular/angular.min.js:17:215) 
    at http://localhost/angularmaterial/lib/angular/angular.min.js:201:117 
(anonymous) @ angular.min.js:6 
(anonymous) @ angular.min.js:30 
q @ angular.min.js:7 
e @ angular.min.js:29 
$b @ angular.min.js:32 
c @ angular.min.js:17 
Zb @ angular.min.js:18 
Tc @ angular.min.js:17 
(anonymous) @ angular.min.js:201 
a @ angular.min.js:131 
(anonymous) @ angular.min.js:27 
q @ angular.min.js:7 
c @ angular.min.js:27 
+0

Können Sie uns zeigen, was passiert beim Hinzufügen von 'ngMaterial' (wie Konsolenfehler, etc.) – Edric

+0

Sicher, ich habe den Konsolenfehler zu meinem Original hinzugefügt Frage. Es bricht die App durch einen völlig leeren Bildschirm, da index.html nicht mehr geladen wird. – user5854648

+0

Versuchen Sie, die Reihenfolge Ihrer Skripts in Ihrem ** HTML ** zu ändern. Es lädt gerade 'js/app.js' und dann' js/controllers.js' '. Laden ** Controller vor App ** und sagen uns, ob das etwas ändert. – Alisson

Antwort

1

Das Problem hierbei ist, dass Sie für angular-aria.js die Referenz sind misisng, es in der folgenden Reihenfolge haben,

<script src="https://code.angularjs.org/1.3.15/angular.js" data-semver="1.3.15"></script> 
<script src="https://code.angularjs.org/1.3.15/angular-animate.js"></script> 
<script src="https://code.angularjs.org/1.3.15/angular-aria.js"></script> 
<link rel="stylesheet" href="https://cdn.rawgit.com/angular/bower-material/v0.8.3/angular-material.css" /> 
<script src="https://cdn.rawgit.com/angular/bower-material/v0.8.3/angular-material.js"></script> 
<script src="https://code.angularjs.org/1.3.15/angular-route.js"></script> 

DEMO

+0

Das ist richtig, ich wusste nicht, dass angular-route.js von angular-aria.js abhängig ist, wenn man Angular Material benutzt.Wenn ich dieses Tutorial ursprünglich ohne Material gemacht habe, war angular-aria nicht Ich weiß, dass Angular Material angular-aria verwendet, aber die App funktionierte ohne das, bevor ich die eckige Route hinzufügte. Wenn Sie die Argumentation kennen, würde ich gerne mehr lernen! Danke für Ihre Hilfe. – user5854648