【问题标题】:AngularJS: How to have different Services/Controllers in same Module?AngularJS:如何在同一个模块中有不同的服务/控制器?
【发布时间】:2014-11-05 11:55:02
【问题描述】:

我的 AngularJS 应用程序中有一个服务和一个控制器,它们应该在同一个模块中,但是是两个不同的文件:

// File 1 (Service)
angular.module('myService', ['ngRoute'])
.service('myService', // ... 


// File 2 (Controller)
angular.module('myController', ['ngRoute'])
.controller('myController', // ..

这很好用。现在我想在一个模块中拥有服务和控制器,这样我就可以只加载一个而不是两个模块。所以我将(两个文件的)第一行更改为:

// Change in both files:
angular.module('myModule', ['ngRoute'])

但现在我得到一个错误:

错误:[$injector:unpr] ...

也许有人知道,这里可能出了什么问题。非常感谢!

【问题讨论】:

    标签: angularjs angularjs-module


    【解决方案1】:

    您可以执行以下操作:

    var myApp = angular.module('myApp', []);
    
    myApp.controller("myService"
    
    myApp.service("myApp")
    

    或者

    angular.module("myModule").controller
    
    angular.module("myModule").service
    

    如果您使用 angular.module('myService', []) 两次,您将两次初始化同一个模块。 如果你只使用 angular.module("myModule"),没有依赖,你只是在调用它。

    【讨论】:

    • 感谢您的回复,迈克尔。您的第一个 sn-p:我必须使用第 1 行(非常 MyApp = ....)两次(在两个文件中),对吗?您的第二个 sn-p:我在哪里声明模块“myModule”?或者我可以直接使用它而不声明它吗?
    • 如果第一个脚本中的变量在第二个脚本中可见,则可以在第一个脚本中初始化模块。只是想看看它是怎么回事:-第一种方法:jsfiddle.net/yfvrjxve-第二种方法jsfiddle.net/yfvrjxve/3
    • 非常感谢迈克尔,它运行良好(我使用第二种方法)。 :)
    【解决方案2】:

    你有两个选择-

    1. 使用 Michael 提到的变量

    1. 像这样使用它-

    // Initialize myService Module in any JS file 
       (make sure this file is included before File 1 and File 2
    angular.module('myService', ['ngRoute']);
    
    // File 1 (Service)
    angular.module('myService').service('myService', // ... 
    
    // File 2 (Controller)
    angular.module('myService').controller('myController', // ..

    【讨论】:

      猜你喜欢
      • 2017-04-11
      • 2014-06-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-07
      • 2013-08-29
      • 1970-01-01
      相关资源
      最近更新 更多