【问题标题】:How to set dynamically a controller in HTML from JS with the controller name?如何使用控制器名称从 JS 动态设置 HTML 中的控制器?
【发布时间】:2014-12-07 14:57:23
【问题描述】:

我的观点如下:

<html ng-app="app" ng-controller="mainController">[...]
<body ng-controller="currentController">[...]

我希望能够从上层控制器 (mainController) 的变量 ($scope.currentController) 设置主体控制器。控制器mainController 如下所示:

angular.module("app").controller("mainController", function($scope) {
    $scope.currentController = "indexController"; // 'indexController' being the name of the controller I want to apply to the view
});

这显然不起作用,如何从JS动态设置控制器到视图?

编辑:(回复@mrhobo)

我试过这个,因为我每个控制器都有一个文件:

angular.module("app").controller("mainController", function($scope, indexController) {
    $scope.currentController = indexController;
});

我收到此错误:Doc Angular error

【问题讨论】:

  • 是否可以将mainController移动到html标签上来实现父子关系?
  • mainController 是用来管理网站使用的控制器的。主页可以是indexController,应用程序页面可以是appController。这两个控制器不管理相同的事情。我试图将它们都放在mainController 上,它工作正常,但我的控制台上有错误,因为我引用了它们中不存在的元素。这就是为什么我更喜欢mainController 根据使用的页面选择要应用的一个。但是在显示的代码中,我只是展示了我想做的基本想法:使用它的名称从 JS 设置一个控制器。
  • 我认为您正在寻找路由概念。
  • 我在正文中已经有了一个 ng-view。 (看答案,我已经回复你了)我知道我可以使用 ng-include/ng-if/ng-show/ng-hide/ng-switch,... 但我想避免不得不复制全身两次……
  • 如果可以将mainController移动到html标签上,使得body上的控制器是mainController的子控制器是可以解决的。让我知道这是否可以接受。

标签: angularjs controller


【解决方案1】:

只需指向控制器的构造函数。

$scope.currentController = indexController;

示例:http://jsfiddle.net/2thj6zdk/

【讨论】:

  • 看起来它正在工作! =) 但是,如果每个控制器都有不同的文件,如何在Main 控制器中获取Ctrl1 的构造函数?我得到:docs.angularjs.org/error/$injector/…
  • 只要确保构造函数是全局范围的,就像示例中一样。
  • 我该如何正确地做到这一点?我每个控制器有一个文件。 (我编辑了我的问题)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-09-05
  • 2016-09-09
  • 2011-05-25
  • 2013-08-17
  • 2023-04-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多