发布新的Angular控制器模块的问题

时间:2014-06-23 23:09:59

标签: angularjs

我想知道是否有人可以帮助我弄清楚如何连接新的角度服务模块。

我一直收到同样的Javascript错误:

Error: [$injector] Unknown provider: gridHierarchyServiceProvider" <-- gridHierarchyService

我的新服务/ gridHierarchyService.js文件:

(function () {
 'use strict';
 var controllerId = 'gridHierarchyService';
 angular.module('app').controller(controllerId, ['common', gridHierarchyService]);

 function gridHierarchyService(common) {
    var service = {
        getDataSourceSchema: getDataSourceSchema
    };
    return service;

    function getDataSourceSchema() {
        var i = 1;
        // TESTING...
    }
  }
 });

在我的dashboard.js文件中,我尝试注入这个新的服务模块:

(function () {
'use strict';
var controllerId = 'dashboard';
angular.module('app').controller(controllerId, ['common', 'datacontext', 'gridHierarchyService', dashboard]);

function dashboard(common, datacontext, gridHierarchyService) {
            ...
}

当然我在index.html中加载它:

 <!-- app Services -->
<script src="app/services/datacontext.js"></script>
<script src="app/services/gridHierarchyService.js"></script>
<script src="app/services/directives.js"></script>    

然而,我在这里清除遗漏的东西。

我还尝试使用.factory()调用模仿我的datacontext.js服务:

 angular.module('app').factory(serviceI,d [...]);

但它不起作用。

        ========== UPDATE !!! ============

我很高兴地说这是一个非常简单的解决方案,感谢社区!

工作服务:

 (function () {
'use strict';
var serviceId = 'gridHierarchyService';
angular.module('app').factory(serviceId, ['common', gridHierarchyService]);

function gridHierarchyService(common) {
    var service = {
        getDataSourceSchema: getDataSourceSchema
    };
    return service;

    function getDataSourceSchema() {
        var i = 1;
        i = 2;
    }
}
})();

1 个答案:

答案 0 :(得分:2)

我看到你在匿名函数中定义了控制器,但是你永远不会执行那些匿名函数。

您的代码:

(function(){
   //declarations
   alert('You will never see me because I do not execute');
});

固定代码(注意最后的parens):

(function(){
   //declarations
   alert('You can see me!');
})();

请参阅上面的代码:http://jsfiddle.net/wilsonjonash/cDBc7/

在此处查看有关模块模式的更多信息:  http://www.adequatelygood.com/JavaScript-Module-Pattern-In-Depth.html

此外,您尝试factory服务是正确的。要将gridHierarchyService变为服务(而不是控制器),只需将controller更改为factory或{/ 1}}

service

希望能帮到你。