Javascript 将服务放入不同的js文件时出错

Javascript 将服务放入不同的js文件时出错,javascript,angularjs,Javascript,Angularjs,我的两个控制器位于一个单独的js文件中,该文件与一个名为messages的服务具有依赖关系 在app.js文件中,我有2个控制器 var learnModule = angular.module('myApp', []); learnModule.controller('ListCtrl', function (messages) { this.messages = messages.list; }); learnModule.controller('PostCtrl', functi

我的两个控制器位于一个单独的js文件中,该文件与一个名为messages的服务具有依赖关系

在app.js文件中,我有2个控制器

var learnModule = angular.module('myApp', []);
learnModule.controller('ListCtrl', function (messages) {
    this.messages = messages.list;
});

learnModule.controller('PostCtrl', function (messages) {
    this.addMessage = function (message) {
        messages.add(message);
    }
});
在Services.js中,我有我的服务

var myApp = angular.module('myApp', []);

myApp.factory('messages', function () {
    var messages = {};
    messages.list = [];
    messages.add = function (message) {
        messages.list.push({ id: messages.list.length, text: message });
    }
    return messages;
});
在模板文件的
部分,我注册了两个js文件,如下所示

  <script src="../Scripts/angular.min.js" runat="server" type="text/javascript"></script>
    <script src="../Scripts/Services.js" runat="server" type="text/javascript"></script>
    <script src="../Scripts/app.js" runat="server" type="text/javascript"></script>

注意:如果我将服务复制到我的controller js文件(即app.js)中,应用程序工作正常


感谢您的帮助…

调用
angular.module
函数有两种不同的函数

  • 如果它有一个数组的第二个参数,它将尝试创建一个新模块(数组中列出了它所依赖的其他模块的名称)
  • 如果没有第二个参数,它将尝试访问已经存在的模块
如果已经有一个具有该名称的模块,您尝试创建一个,或者没有创建一个模块,您尝试访问它,那么将出现错误


解决方案是只调用一次数组作为第二个参数的函数,
angular.module('myApp',[])
,并位于页面中引用的第一个文件的顶部。在其他示例中,使用不带第二个参数的表单
angular.module('myApp')
访问先前创建的模块。

调用
angular.module
函数有两个不同的函数

  • 如果它有一个数组的第二个参数,它将尝试创建一个新模块(数组中列出了它所依赖的其他模块的名称)
  • 如果没有第二个参数,它将尝试访问已经存在的模块
如果已经有一个具有该名称的模块,您尝试创建一个,或者没有创建一个模块,您尝试访问它,那么将出现错误


解决方案是只调用一次数组作为第二个参数的函数,
angular.module('myApp',[])
,并位于页面中引用的第一个文件的顶部。在其他模式中,使用不带第二个参数的表单
angular.module('myApp')
访问先前创建的模块。

问题是,您有两个同名的模块
myApp
。只需重命名第二个模块

var myApp = angular.module('mySecondApp', []);    
myApp.factory('messages', function () {
    var messages = {};
    messages.list = [];
    messages.add = function (message) {
        messages.list.push({ id: messages.list.length, text: message });
    }
    return messages;
});
将它作为依赖项添加到first,您就可以开始了

var learnModule = angular.module('myApp', ['mySecondApp']);
learnModule.controller('ListCtrl', function (messages) {
    this.messages = messages.list;
});

learnModule.controller('PostCtrl', function (messages) {
    this.addMessage = function (message) {
        messages.add(message);
    }
});

干杯

问题是,您有两个同名的模块
myApp
。只需重命名第二个模块

var myApp = angular.module('mySecondApp', []);    
myApp.factory('messages', function () {
    var messages = {};
    messages.list = [];
    messages.add = function (message) {
        messages.list.push({ id: messages.list.length, text: message });
    }
    return messages;
});
将它作为依赖项添加到first,您就可以开始了

var learnModule = angular.module('myApp', ['mySecondApp']);
learnModule.controller('ListCtrl', function (messages) {
    this.messages = messages.list;
});

learnModule.controller('PostCtrl', function (messages) {
    this.addMessage = function (message) {
        messages.add(message);
    }
});

干杯

您再次声明myApp。请尝试为您的服务js命名一个新名称,并将其作为依赖项添加到主模块中

您再次声明myApp。尝试为您的服务js命名一个新名称,并将其作为依赖项添加到主模块中

不,请保持原样,因为正如您所说,它是angularjs应用程序的“入口点”。但是,无论何时编写,
angular.module('appName')
,实际上都是在向angularjs注册应用程序。根据,如果使用已存在的名称创建模块,它将覆盖上一个模块。(所以最后获胜)不,保持原样,因为正如你所说,它是angularjs应用程序的“入口点”。但是,无论何时编写,
angular.module('appName')
,实际上都是在向angularjs注册应用程序。根据,如果使用已存在的名称创建模块,它将覆盖上一个模块。(所以最后获胜。)