AngularJS контроллер не загружается - PullRequest
0 голосов
/ 02 октября 2018

У меня есть простой app.js, который должен загрузить контроллер.Контроллер не загружается, хотя.Буду признателен за помощь.

Вот мой app.js:

/* globals APP, angular */
angular.module('templates-outlook', []);

angular.module(APP, [
     'templates-outlook',
     'ui.router'
])
.config[(
     '$stateProvider',
     function ($stateProvider) {
          console.log("Loaded app.js");

          $stateProvider
          .state('outlook', {
               url: '/extension',
               templateUrl: 'templates/outlook/outlook_main.html',
               controller: 'OutlookMainController'
          })

     }
])

Вот outlookmain.js.Это действительно просто.

/* global angular, APP */


angular.module(APP).controller('OutlookMainController', [
     console.log('lion king'),
     function () {
          console.log('blah blah');
     }
]);

Когда я перехожу на localhost / extension, я вижу только lion king Loaded app.js

Почему я не вижу "бла-бла"?

Примечание: причина, по которой я вижу короля льва (я думаю), в том, что в шапке я загружаю

<script src="/load.php?f=outlook/app.js"></script>
<script src="/load.php?f=outlook/outlookmain.js"></script>

Ответы [ 2 ]

0 голосов
/ 02 октября 2018

Ваше определение контроллера неверно:

angular.module(APP).controller('OutlookMainController', [
     console.log('lion king'),
     function () {
          console.log('blah blah');
     }
]);

Когда вы изменяете форматирование, легко увидеть, что вы передаете массив в качестве второго аргумента.

angular.module(APP).controller('OutlookMainController', 
  [console.log('lion king'), function () { console.log('blah blah'); }]
);

angular.module(APP).controller('OutlookMainController', [console.log('lion king'), function() { console.log('blah blah'); }]
);

НО, предполагается, что массив содержит внедренные сервисы и провайдеров, а последний элемент массива является функцией вашего контроллера.Здесь вы вставляете оператор console.log.Это не имеет смысла.

И, как вы можете видеть из этого определения контроллера в Plunker, этот код выдает ошибку в консоли: https://next.plnkr.co/edit/cHQjFsx3q0oHvkxC

Ошибка: [$ injector: itkn] Неправильная инъекциямаркер!Ожидаемое имя службы в виде строки, получило неопределенное значение

Я думаю, что вы хотели сделать следующее:

angular.module(APP).controller('OutlookMainController', [function() {
     console.log('lion king'),
     function () {
          console.log('blah blah');
     }
}]);

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

angular.module(APP).controller('OutlookMainController', [function() {
     console.log('lion king');

     console.log("blah blah blah");

     (function () {
          console.log('blah blah');
     })();

     function logBlah() {
          console.log('blah blah');
     }
     logBlah();
}]);

AngularJS не меняет базовых принципов Javascript.

0 голосов
/ 02 октября 2018

Ниже приведен один из примеров объявления функции.

 function nameOfFunction() {
      console.log('some text to print');
 } 

Для ваших требований это должно быть как показано ниже.

angular.module(APP).controller('OutlookMainController', [
     console.log('lion king');
     // Function declaration here
     function testFunction() {
          console.log('blah blah');
     }
     // Call the function here
     testFunction();
]);

`

...