当前位置: 首页 > 面试题库 >

使用另一个模块中的子控制器

胡云瀚
2023-03-14
问题内容

我已经定义了一个模块,并使用ng-
app指令将其设置为我的应用程序的主要模块。我使用angular.module(’myApp’)。controller()向主应用程序添加了两个控制器。这些控制器中的一个具有页面范围的范围,而另一个控制器是子控制器。

我现在想做的是包含一个控制器,该控制器属于另一个模块(不是主要的myApp模块),但我无法弄清楚。我不想全局命名空间控制器。

有人知道怎么做吗?

这是我到目前为止的内容:

<!doctype html>
<html lang="en" data-ng-app='myApp' data-ng-controller='myApp.mainController'>
<head>
  <meta charset="utf-8">
  <title>Untitled</title>
  <script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
  <script>
    $(function() {
      var app, module;

      //create two modules, one of which will be used for the app base
      app = angular.module('myApp', []);
      module = angular.module('otherModule', []);

      //create main controller for main app
      app.controller('myApp.mainController', function($scope) {
        $scope.content = 'App main controller content';
      });

      //create child controller for main app
      app.controller('myApp.subController', function($scope) {
        $scope.content = 'App sub controller content';
      });

      //create a controller for the other module
      module.controller('othermodule.controller', function($scope) {
        $scope.content = 'Other module controller content';
      });
    });


  </script>
</head>
<body>

  <!-- output content from main controller from main module: myApp -->
  {{content}}

  <!-- specify use of main module's child controller and output its content -->
  <div data-ng-controller='myApp.subController'>
    {{content}}
  </div>

  <!-- NOT WORKING - ideally should output content from the other module's controller -->
  <div data-ng-controller='othermodule.controller'>
    {{content}}
  </div>

  <!-- load angular library -->
  <script src="lib/angular/angular.js"></script>
</body>
</html>

此代码输出以下内容,并显示JavaScript错误,该错误实质上表示未找到othermodule.controller控制器。

应用主控制器内容

应用子控制器内容

{{内容}}

确切错误:

> Error: Argument 'othermodule.controller' is not a function, got
> undefined
> assertArg@http://localhost/sandbox/angular/apptemplate/lib/angular/angular.js:1005
> assertArgFn@http://localhost/sandbox/angular/apptemplate/lib/angular/angular.js:1016
> @http://localhost/sandbox/angular/apptemplate/lib/angular/angular.js:4740
> applyDirectivesToNode/nodeLinkFn/<@http://localhost/sandbox/angular/apptemplate/lib/angular/angular.js:4322
> forEach@http://localhost/sandbox/angular/apptemplate/lib/angular/angular.js:140
> nodeLinkFn@http://localhost/sandbox/angular/apptemplate/lib/angular/angular.js:4307
> compositeLinkFn@http://localhost/sandbox/angular/apptemplate/lib/angular/angular.js:3953
> compositeLinkFn@http://localhost/sandbox/angular/apptemplate/lib/angular/angular.js:3956
> nodeLinkFn@http://localhost/sandbox/angular/apptemplate/lib/angular/angular.js:4338
> compositeLinkFn@http://localhost/sandbox/angular/apptemplate/lib/angular/angular.js:3953
> publicLinkFn@http://localhost/sandbox/angular/apptemplate/lib/angular/angular.js:3858
> bootstrap/</<@http://localhost/sandbox/angular/apptemplate/lib/angular/angular.js:964
> Scope.prototype.$eval@http://localhost/sandbox/angular/apptemplate/lib/angular/angular.js:7993
> Scope.prototype.$apply@http://localhost/sandbox/angular/apptemplate/lib/angular/angular.js:8073
> bootstrap/<@http://localhost/sandbox/angular/apptemplate/lib/angular/angular.js:962
> invoke@http://localhost/sandbox/angular/apptemplate/lib/angular/angular.js:2843
> bootstrap@http://localhost/sandbox/angular/apptemplate/lib/angular/angular.js:961
> angularInit@http://localhost/sandbox/angular/apptemplate/lib/angular/angular.js:936
> @http://localhost/sandbox/angular/apptemplate/lib/angular/angular.js:14729
> b.Callbacks/c@http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js:3
> b.Callbacks/p.fireWith@http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js:3
> .ready@http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js:3
> H@http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js:3
> 
> http://localhost/sandbox/angular/apptemplate/lib/angular/angular.js
> Line 5687

问题答案:

您当前所做的是“声明”了两个模块appmodule

使用角度引导时,您已要求使用进行引导app。因此,现在您的应用程序使用进行app了引导,但是app没有对其他模块(即module!)的引用。

因此,您将不得不使用来引导您的应用程序app并指定对它的依赖关系,module或者使用全新的模块来引导您的应用程序并指定对app和的依赖项module

这是定义依赖项的方式

angular.module('app',['module']);

如果您想创建一个全新的模块并将两者都指定为依赖项

angular.module('myApp',['app','module'])

注意: 如果创建一个全新的模块,则必须使用此新模块来引导角度应用程序。

<html ng-app="myApp"...


 类似资料:
  • 问题内容: 在模块内,控制器可以从外部控制器继承属性: 示例如下: 无效链接 : http : //blog.omkarpatil.com/2013/02/controller-inheritance-in- angularjs.html 模块内部的控制器也可以从同级继承吗? 由于需要将函数用作第一个参数,并且找不到对的引用,因此第二个代码不起作用。 问题答案: 是的,它可以,但是您必须使用该服务

  • 问题内容: 使用SceneBuilder。我有2个阶段,每个阶段都有一个控制器: , 。 Stage1Controller: Stage2Controller: 这是使用2种方法 (称为in 方法)将这两个fxml文件加载到Main.java类中的方式: 该方法在第一阶段中用作方法,它在两个阶段都转换视图。 如何输入方法?谢谢 问题答案: “快速又脏”的方法是给的引用: 现在在您的主应用程序中:

  • 在ExtensionBuilder的帮助下,我为TYPO3(7.6.15)创建了一个简单的后端模块。和具有、和。只有,它是模块的主视图,应该如下所示: 现在,我想从,如果可能的话,我希望在视图的模板()中执行此操作。 我感谢所有的帮助,并预祝大家有一个美好的一天!

  • 问题内容: 我试图通过使用变量在第一控制器中调用第二控制器的方法。这是我的第一个控制器中的一种方法: 我可以设置的值,但是由于某种原因我不能打电话。控制台显示此错误: TypeError:对象#没有方法’getMainCategories’ 有没有一种方法可以调用上述方法? 编辑: 我使用以下方法同时加载两个应用程序。 我肯定可以在这里使用服务,但我想知道是否还有其他选择可以这样做! 问题答案:

  • 问题内容: 我已使用以下命令“ go mod init database”在“数据库”文件夹中的“ GOPATH”之外创建了个人使用的模块库,但我不知道: 如何在其他模块中使用/ 导入 该模块? 操作系统: Windows 7 ,Go: v1.11 问题答案: 最简单,可行的现成解决方案是将您的包/模块放入VCS(例如github.com),因此其他包(在其他模块内部)可以通过导入来简单地引用它:

  • 我有两个控制器和。我正在读一本书的内容。来自的txt文件,我希望将该文本放置在的文本区域中。代码在中运行并读取良好,但当打开中的窗口时,从中读取的内容。文本内容在文本区域中不可见。我的显示String mine包含内容,但它不显示在的文本区域中。请帮助任何人。非常感谢。 FXMLDocumentController代码 在中,有一个我删除了和,这样代码就可以工作了。