AngularJS – 按字符串获取控制器功能

前端之家收集整理的这篇文章主要介绍了AngularJS – 按字符串获取控制器功能前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在使用ng-include指令,该指令将具有基于范围中的一些变量的动态模板和控制器.目前我有这样的地图.

$scope.map = {
    'key1': {
        controller: Ctrl1,templateUrl: 'tmpl1.html'
 },'key12': {
        controller: Ctrl2,templateUrl: 'tmpl1.html'
    }
}

...

<div ng-include src="map[key].templateUrl" ng-controller="map[key].controller"></div>

但是,我想丢弃这个地图,而是通过字符串生成templateUrl和controller.以下命令返回控制器对象,但我需要返回函数.

var ctrlObj = angular.module('moduleName').controller('ControllerName')

编辑1

澄清:

However,I would like to discard this map and instead generate the templateUrl and controller via a string

基本上我会在一个页面上设置“子控制器”,以便它可以是常规配置.主控制器具有所有子控制器将共享的信息:FooCtrl将是’主’控制器,而FooBarCtrl,FooBarSubCtrl将是子控制器.我的目标是创建一个将“Bar”解析为“FooBarCtrl”的函数,并从中获取相应的控制器函数.

解决方法

我没有看到实现这一目标的任何微不足道的方法,但我可以想象两种可能的解决方案:

>修改ngInclude指令,使其获取src表达式,解析它以获取控制器名称(模板Foo.html =>控制器FooCtrl)并在元素上设置控制器,就像在ngView(https://github.com/angular/angular.js/blob/master/src/ng/directive/ngView.js#L149)中完成一样:

controller = $controller(current.controller,{$scope: lastScope});
element.contents().data('$ngControllerController',controller);

>创建新指令,例如“ajpaz-controller”监视src表达式并以与第1点相同的方式将控制器链接到元素.显而易见的优点是可以在不修改原始ng-include的情况下完成.它会像这样工作

<div ng-include src="templateUrl" ajpaz-controller>

因此,您只需将当前的templateUrl保留在父控制器中.希望有意义;)

猜你在找的Angularjs相关文章