加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-17 17:12:28 所属栏目:安全 来源:网络整理
导读:我正在使用ng-include指令,该指令将具有基于范围中的一些变量的动态模板和控制器.目前我有这样的地图. $scope.map = { 'key1': { controller: Ctrl1,templateUrl: 'tmpl1.html' },'key12': { controller: Ctrl2,templateUrl: 'tmpl1.html' }}...div ng-inclu
我正在使用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保留在父控制器中.希望有意义;)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读