控制器名称来自另一个控制器的范围

时间:2016-06-03 05:20:48

标签: javascript html angularjs html5

你能帮帮我吗? 我想设置包含在另一个控制器范围内的控制器名称。

JS档案:

"operatorType": "MergeCreateNode"
"operatorType": "CreateNode"
"operatorType": "MergeCreateRelationship"

HTML文件:

.controller('PageCtrl', [
  '$http',
  '$scope',
  '$routeParams',
  '$location',
  function($http, $scope, $routeParams, $location){

    switch($routeParams.page) {
      case 'companies':
        $scope.CurrentPageCtrl = 'CompaniesCtrl';
      break;
      default:

      break;
    }

  }])

.directive('myPagecontent', function() {
  return {
    template: '<ng-controller ng-controller = "{{CurrentPageCtrl}}"></ng-controller>'
  };
})

我得到错误:

<ng-controller ng-controller = "PageCtrl">
    <my-pagecontent></my-pagecontent>
</ng-controller>

1 个答案:

答案 0 :(得分:0)

这可能有点棘手,因为在这种情况下ng-controller需要一个表达式来计算控制器构造函数,而不是一个包含控制器名称的字符串。

解决问题的一种方法是执行以下操作:

app.controller('PageCtrl', [
  '$http',
  '$scope',
  '$location',
  function($http, $scope, $location) {

    $scope.CurrentPageCtrl = Controller1;
  }
]);

function Controller1($scope) {

  console.log('Controller1');
}

app.controller('Controller1', Controller1);

function Controller2($scope) {

  console.log('Controller2');
}

app.controller('Controller2', Controller2);

app.directive('myPagecontent', function() {
  return {
    template: '<ng-controller ng-controller="CurrentPageCtrl"></ng-controller>'
  };
});

演示: http://plnkr.co/edit/s3yy2fdF5OgBjPcKWikw?p=preview

另一种解决方案是创建一个在其他所有内容之前运行的指令,它使用控制器名称获取变量,添加具有正确值的ng-controller,然后删除它们。