Javascript 从变量值动态设置ng控制器

Javascript 从变量值动态设置ng控制器,javascript,angularjs,node.js,angularjs-ng-repeat,ng-controller,Javascript,Angularjs,Node.js,Angularjs Ng Repeat,Ng Controller,我正在使用angularJs和nodejs开发一个应用程序。将控制器的名称设置为主控制器变量的值时,我感到震惊。为了更好地解释,my index.html如下所示: <tbody ng-repeat="group in groups"> <tr ng-repeat="member in group.members" > <td rowspan="{{group.members.length}}" ng-hid

我正在使用angularJs和nodejs开发一个应用程序。将控制器的名称设置为主控制器变量的值时,我感到震惊。为了更好地解释,my index.html如下所示:

        <tbody ng-repeat="group in groups">

        <tr ng-repeat="member in group.members" >
            <td rowspan="{{group.members.length}}" ng-hide="$index>=0">
            </td>

            <td>{{member.taskName}}</td>
            <td><div class={{group.colorMe[0]}}>{{member.env}}</div>
                <button class="btn btn-info" ng-controller="member.taskName" ng-click="test( member.taskName , 'env', group.colorMe[0])">Sanity</button>
            </td>

{{member.taskName}
{{member.env}
神志正常
我的主控制器如下所示,其中组的定义如下:

  var tasks =['task1','task2','task3','task4','task5'];

      for(i=0;i<tasks.length;i++)

    {

    var group = {
                  "id" : i+1,
                  "members" : [{
                      "taskName":tasks[i].toUpperCase(),
                      "env1":versionMap["env1"+tasks[i]],
                      "env2":versionMap["env2"+tasks[i]],
                      "env3":versionMap["env3"+tasks[i]]

                  }]
                };
              $scope.groups.push(group);
              }
var tasks=['task1','task2','task3','task4','task5'];

对于(i=0;i您需要向服务添加一些额外的逻辑。因此它需要新的依赖项,例如:
$controller
$compile
$root$scope
$scope
。可选的
$templateCache
。模板也是可选的

演示

动态控制器服务:

var controllerTemplate = $templateCache.get(params.templateUrl); // getting inline template string

var templateScope = $rootScope.$new(true); // creating new scope for future controlelr
var templateCtrl = $controller(dynamicControllerName, { // creating controller
     $scope: templateScope // locals stuff that inject in controller           
});

var dynamicControllerElement = angular.element(controllerTemplate); // wrapping template into element

dynamicControllerElement.children().data('$ngControllerController', templateCtrl); // inject controller into element

var compiled = $compile(dynamicControllerElement)(templateScope); // compile all together

$('.container').html(compiled); // putting compiled into DOM (jQuery example) 
为您提供更具体的代码:

指令

 app.directive('dynamicControllerButton', function(dynamicControllerService){
    return {
      restrict: 'E',
      scope: {
         controllerName: '='
      },
      template: '<button class="btn btn-info">Sanity</button>', //added this comma
      link: function(scope, elem, attrs) {

           dynamicControllerService.createController(scope.controllerName, elem); // we passing also element;

    }

  }

})
app.service('dynamicControllerService', function($rootScope, $controller, $compile){

     this.createController = function(dynamicControllerName, element) {

    // all that stuff in example above

      element.html(compiled); // adding compiled controller in element example ;

     }

})
HTML

    <tr ng-repeat="member in group.members" >
        <td rowspan="{{group.members.length}}" ng-hide="$index>=0">
        </td>

        <td>{{member.serviceName}}</td>
        <td><div class={{group.colorMe[0]}}>{{member.env}}</div>
            <dynamic-controller-button>  data-controller-name="dynamic_set_controller" ng-click="test( member.serviceName , 'env', group.colorMe[0])"></dynamic-controller-button>
        </td>

{{member.serviceName}
{{member.env}
数据控制器名称=“动态设置控制器”ng click=“测试(member.serviceName,'env',group.colorMe[0])”>

我希望它将有助于

什么是控制器服务?我需要在哪里插入该代码?感谢您的详细回答。我将尝试以下方法:)我无法理解控制器名称的值是如何设置的,以及您建议的,$controller、$compile、$root$scope或$scope、$templateCache,所有这5个都应该在主控制器中还是在我正在设置的嵌套控制器中?不,它们仅在
dynamicControllerService
中设置<代码>控制器名称
传递到指令
dynamicControllerButton
,然后传递到服务方法
createController
是的,您是对的。正如我所说,tempate是可选的,因此您可以执行类似于
var controllerTemplate='Sanity'的操作。甚至不要使用
$tempalteCache`你有解决方案吗?@NareshKumar正在尝试Leguest提供的解决方案。有什么建议吗?事实上我很想知道NagireddyHanisha的答案