如何在AngularJS中集成两个模块

时间:2016-03-25 14:25:22

标签: javascript angularjs

我有两个模块如下。

var module1 = angular.module('myApp',['ngAnimate','ngTouch']
   .controller('MainCtrl', function ($scope)){
   });

var module2 = angular.module('myApp',[]);
    module2.controller('NameCtrl',function($scope)){

    });

和Html在这里

<body ng-app='myApp'>
    <div ng-controller='MainCtrl'> //Code here</div>
    <div ng-controller='NameCtrl'>//Code here</div>
</body>

但这会抛出这样的错误。 &#39; NameCtrl&#39;不存在

请让我知道如何解决这个问题。 提前致谢

9 个答案:

答案 0 :(得分:2)

正确的结构看起来像这样......

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

myApp.controller('MainCtrl', function($scope){

});


myApp.controller('NameCtrl', function($scope){

});

<强>记住 每个模块都像一个单独的应用程序。每个模块都必须是一个唯一的名称,每个模块都可以有自己的配置,控制器,服务等。

答案 1 :(得分:1)

您不需要2个模块。

module1.controller('NameCtrl',function($scope)){

    });

是你想要的

答案 2 :(得分:1)

您使用同名声明两个不同的模块。你不能这样做。

angular.module方法是jQuery-like getter和setter。如果您使用仅使用一个参数来调用它,那么它将作为getter使用,如果您使用两个或更多参数调用它,则它将作为{ {1}}。

因此,如果你需要(似乎)只注册另一个配方(控制器,服务,ecc。)而不是新模块,你需要setter

否则,如果您需要新模块,则需要为其指定一个不同的名称,并通过angular.bootstrap手动引导它

答案 3 :(得分:0)

这是你要找的人吗?

var modules = angular.module('myApp',['ngAnimate','ngTouch']
  .controller('MainCtrl', function ($scope)){


 });

  modules.controller('NameCtrl',function($scope)){

});

答案 4 :(得分:0)

您无法使用相同的名称声明两个模块。您可以在同一模块中使用不同的controller, service, directive, factory等,这样您就不需要为简单的应用程序使用不同的模块。

如果需要在同一模块中使用不同的控制器,请使用

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

   myModule .controller('MainCtrl', function ($scope){
      //code
   });

    myModule .controller('NameCtrl', function($scope){
       //code
    });

如果需要不同的模块,则需要不同的名称。可以为那些基于模块的应用程序使用不同的模块。

答案 5 :(得分:0)

您不能拥有两个名称相同的模块。 如果您的项目是以某种方式构建的,那么真正阻止您只使用一个模块,您可以这样做。

var module2 = angular.module('myModule2',[]);
module2.controller('NameCtrl',function($scope) {...});

var module1 = angular.module('myApp',['ngAnimate','ngTouch', 'myModule2']
   .controller('MainCtrl', function($scope){...});

答案 6 :(得分:0)

要将您的应用程序分解为多个模块,您需要将应用程序和组件命名为不同的内容,并使您的应用程序依赖于您的组件。

var myComponent = angular.module('myComponent',[]);
myComponent.controller('NameCtrl',function($scope)){});

var anotherComponent = angular.module('anotherComponent',[]);
anotherComponent.controller('NameCtrl',function($scope)){});

var myApp = angular.module('myApp',['ngAnimate','ngTouch', 'myComponent', 'anotherComponent']);
myApp.controller('MainCtrl', function ($scope)){});

答案 7 :(得分:0)

这有点令人困惑,因为根据docs,通过声明module2,你覆盖已经存在的myApp模块,这将导致MainCtrl不存在。考虑尝试Wainage建议的内容,或者,如果您确实需要两个单独的模块,请执行以下操作:

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

module1.controller('NameCtrl',function($scope){
    $scope.value = 'Name controller value';
});
var myApp = angular.module('myApp', [/*Other dependencies*/'myApp.module1']);
myApp.controller('MainCtrl', function ($scope){
    $scope.value = 'Main value';
});

答案 8 :(得分:0)

您不需要创建两个模块。

您可以按照以下方式实施所需内容。

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

myComponent.controller('MainCtrl',function($scope)){

};

myComponent.controller('NameCtrl',function($scope)){

};