AngularJS控制器未加载

时间:2018-10-02 13:35:35

标签: angularjs angular-ui-router angularjs-scope

我有一个简单的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时,我只会看到 狮王 加载的app.js

为什么我看不到“等等”?

注意:我看到狮子王的原因(我认为)是因为我正在加载标题

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

2 个答案:

答案 0 :(得分:1)

下面是声明函数的示例之一。

 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();
]);

`

答案 1 :(得分:1)

您的控制器定义不正确:

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的基本原理。