Контроллер не распознает - PullRequest
0 голосов
/ 01 июня 2018

У меня есть контроллер, определенный в script.js, который называется HelloController, который работал до того, как я добавил ngRoute и сделал для маршрутизации.Отображаемая ошибка:

Ошибка: [$ controller: ctrlreg] http://errors.angularjs.org/1.6.9/$controller/ctrlreg?p0=HelloController

Я проверил документацию об этой ошибке, но не могу получить то, чтоэто проблема на самом деле с кодом.следующий код:

script.js

// Code goes herE


   (function(){
        angular.module('myapp',[])
       .controller(['$scope','$http',

          function HelloController($scope,$http){
             $scope.helloTo = "angular";
          $scope.hide = true;

 $scope.search = (NameToSearch)=>{

    $http.get("https://api.github.com/users/"+NameToSearch).then((response)=>{
    console.log(response);
    $scope.data=response.data;

    console.log($scope.data.repos_url);
    $http.get($scope.data.repos_url).then((resp)=>{
        //console.log(resp);
        $scope.repos=resp.data;
        if(resp.data){
            console.log("hide scope")
            $scope.hide=false;
        }
        console.log(resp);
        }).then(()=>{
            if($scope.repos){
                $scope.hide= false;
            }
        })
    });

    }
   }
   ]);
    })();

configuaration.js

    angular.module('myapp',['ngRoute'])
         .config(['$routeProvider',function configu($routeProvider) {
      // $urlRouterProvider.otherwise("/view1");
      console.log("HERE")
       $routeProvider.when('/',{
           templateUrl:'view1.html',
            controller:"HelloController"
        });
     }      
    ]);

Заголовок файла индекса выглядит следующим образом:

     <head>
      <link rel="stylesheet" 
          href="bower_components/bootstrap/dist/css/bootstrap.css">
      <script src = 

   "https://ajax.googleapis.com/ajax/libs/angularjs/1.6.9/angular.min.js"> 
  </script>
     <link rel = "stylesheet"
     href = 
 "https://ajax.googleapis.com/ajax/libs/angular_material/1.0.0/angular- 
 material.min.css">
     <script src = 
  "https://ajax.googleapis.com/ajax/libs/angular_material/1.0.0/angular- 
  material.min.js"></script>
     <!-- <script src="bower_components/angular-ui-router/release/angular- 
ui-router.min.js"></script> -->
     <script  
   src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.6.9/angular- 
   route.min.js.map"></script>
     <script 
   src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.9/angular- 
    route.js"> 
    </script>
     <script src="script.js"></script>
    <script src="configuration.js"></script>

   </head>

было бы неплохо, если бы кто-то мог помочь, потому что я новичок в angular

Ответы [ 2 ]

0 голосов
/ 01 июня 2018

В вашем script.js определите угловой модуль app один раз, а затем в любом файле сценария просто зарегистрируйте контроллер на этом модуле app.contoller.

Вот рабочий Plunker:

https://plnkr.co/edit/uWXnAkbAbJIb7jJEXZTP?p=preview

0 голосов
/ 01 июня 2018

Ошибка http://errors.angularjs.org/1.6.9/$controller/ctrlreg?p0=HelloController из-за неправильного порядка загрузки файлов в ваш index.html.Я упомяну это в своем полном объяснении ...

Есть так много вещей, которые я должен сделать.Некоторые вещи необходимы для того, чтобы работать, а другая - моя личная рекомендация.Следуйте:

  • Необходимые вещи:

    • Вы должны использовать ng-app внутри вашего index.html, чтобы определить, где будет отображаться содержимое вашего $объем.Ваш код не имеет этого тега;

    • Чтобы использовать 'ngRoute', вы должны добавить элемент ng-view в ваш index.html.Есть в нем то, когда будет рендерит 'templateUrl', который вы определяете в ваших маршрутах.Если вы измените свой URI, ng-route будет отображать шаблоны внутри него.Обычно это помещается внутри вашего тела внутри тега div.ig: <div ng-view></div>;

    • Когда вы объявите контроллер, вы должны сделать вызов angular.module('app'), но этот вызов не может быть равен основному вызову, который выполняется для нашей конфигурации.JS (angular.module('app', ['ngRoute']);).Вы не используете блочные кавычки после «app», потому что это означает, что вы снова объявляете приложение;
    • Чтобы использовать 'ngRoute', вы должны использовать <base href="/"/>.Этот тег будет определять, каким будет ваше начальное значение URI для ваших маршрутов.Обычно это значение определяется как href совпадение с первыми маршрутами;https://docs.angularjs.org/error/$location/nobase

    • Внутри вашего index.html вы загружаете сначала скрипт.js, где определяется контроллер, а после загрузки - файл configuration.js, где объявляется ng-приложение.Основной файл в вашем AngularApp.Чтобы загрузить этот ресурс, нужно обратить внимание на порядок загрузки.Со временем вы сможете распознать это на первый взгляд, но пока сохраните этот порядок, чтобы загрузить свои ресурсы в index.html;

1 ° - Зависимости (angular, angular-route, jQuery и т. Д.);
2 ° - Файл, в котором определен angular.module('myApp',[]).В вашем случае, configuration.js;
3 ° - Контроллеры, Сервисы, Конфигурация, Фильтры, Модули и т.д .;

  • Внутри вашей конфигурации есть синтаксическая ошибка: configu(function()...;

Рекомендация для вашего приложения AngularJS:

  • Используйте комментарии внутри вашего index.html, чтобы определить, где находится область загрузки для каждого файла.Пример:
    <!-- Dependencies files -->
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.9/angular.min.js"></script> <script src="https://ajax.googleapis.com/ajax/libs/angular_material/1.0.0/angular-material.min.js"></script> <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.9/angular-route.js"></script> `` <!-- App, Routes-->
    <script src="configuration.js"></script>
    <script src="script.js"></script>

<!-- Controllers -->
<script src="example.controller.js"></script>

<!-- Services -->
<script src="example.services.js"></script>

  • Я предпочитаю объявлять свои маршруты в другом файле, но этовозможно в том же файле, который объявлен как app.main;
  • Не объявляйте контроллеры, службы, маршруты и т. д., используя вложенные коды.Например, в вашем файле configuration.js:
  • Используйте var app = angular.module("myapp");
    app.$inject = ['$scope', '$http'];
    app.controller('HelloController', function HelloController(...
    вместо
    angular.module('myapp', ['$scope', '$http']).controller(...';

  • Воспользуйтесь услугой, чтобы сделать запрос.Угловой сервис.Рекомендуется использовать $ http в этом компоненте https://docs.angularjs.org/api/ng/service;

Это реализация работы в качестве очарования: D: index.html

`

<html  ng-app="myapp">
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.9/angular.min.js"></script>
    <script src="https://ajax.googleapis.com/ajax/libs/angular_material/1.0.0/angular-material.min.js"></script>
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.9/angular-route.js"></script>
    <script src="configuration.js"></script>
    <script src="script.js"></script>
</head>
<body>
    <base href="/" />
    <div ng-view></div>
</body>
</html>

`

configuration.js



    angular.module('myapp', ['ngRoute'])
        .config(function ($routeProvider, $locationProvider) {

            $locationProvider.html5Mode(true);

            $routeProvider

                .when('/', {
                    templateUrl: '/view1.html',
                    controller: 'HelloController'
                })
                .otherwise({ redirectTo: '/' });
        });

script.js




    (function () {
        var app = angular.module('myapp');

        app.$inject = ['$scope', '$http'];

        app.controller('HelloController', function HelloController($scope, $http) {
            $scope.helloTo = "angular";
            $scope.hide = true;

            $scope.search = (NameToSearch) => {

                $http.get("https://api.github.com/users/" + NameToSearch).then((response) => {
                    console.log(response);
                    $scope.data = response.data;

                    console.log($scope.data.repos_url);
                    $http.get($scope.data.repos_url).then((resp) => {
                        //console.log(resp);
                        $scope.repos = resp.data;
                        if (resp.data) {
                            console.log("hide scope")
                            $scope.hide = false;
                        }
                        console.log(resp);
                    }).then(() => {
                        if ($scope.repos) {
                            $scope.hide = false;
                        }
                    })
                });
            };

        });
    })();


...