Nano Hash - криптовалюты, майнинг, программирование

ngMaterial и ngRoute вместе ломают приложение

Я следовал учебнику по AngularJS и другому учебнику по Angular Material. Теперь я хотел использовать Angular Material в своем проекте AngularJS.

Однако я обнаружил, что после добавления «ngMaterial» к зависимостям приложение прерывается. Я также использую Brackets, чтобы смотреть его вживую, и, конечно же, каждый раз, когда я нажимаю «Сохранить» после добавления «ngMaterial», он ломается. Я попытался изменить, когда я его ввожу, а также изменить порядок загрузки в файле HTML.

Ниже приведен код для HTML, app.js и controller.js. Я ценю любое руководство!

--EDIT-- Я добавил ошибку консоли, как указано ниже. Обратите внимание, что если я удалю ngMaterial из своего app.js, ошибок консоли не будет.

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;
    }

  });
}]);

ОШИБКА КОНСОЛИ

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

  • Можете ли вы показать нам, что происходит при добавлении ngMaterial (например, ошибки консоли и т. д.) 22.05.2017
  • Конечно, я добавил ошибку консоли к своему исходному вопросу. Это ломает приложение, предоставляя совершенно пустой экран, так как index.html больше не загружается. 22.05.2017
  • Попробуйте изменить порядок скриптов в вашем HTML. Сейчас загружается js/app.js, затем js/controllers.js". Загрузите контроллеры перед приложением и сообщите нам, если это что-то изменит. 22.05.2017
  • Я просто поменял порядок, поставив js/controllers.js выше js/app.js. Ничего не изменилось. 22.05.2017

Ответы:


1

Проблема в том, что вы ошиблись ссылкой на angular-aria.js, расположите ее в следующем порядке:

<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>

ДЕМО

22.05.2017
  • Это правильно. Я не знал, что angular-route.js зависит от angular-aria.js при использовании Angular Material. Когда я изначально делал этот урок без материала, angular-aria не использовалась. Я знаю, что Angular Material использует angular-aria, но приложение работало без него до того, как я добавил angular-route. Если вы знаете аргументацию, я хотел бы узнать больше! Спасибо за помощь. 23.05.2017
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..