AngularJS使用作用域变量设置ng-controller

4

我有一个模板(用于模态弹出窗口),根据其功能,应加载不同的控制器:

<div id="MsgBoxBack" ng-controller="{{notification.ctrl}}">

控制器:

app.controller('MainCtrl', ['$scope', function($scope){
    $scope.notification = {
        ctrl: 'logout', 
        //...
    };
}]);

app.controller('logout', ['$scope', function($scope){
    //...
}]);

当我尝试通过作用域变量设置控制器名称时,出现以下错误:
Error: [ng:areq] Argument 'notification.ctrl' is not a function, got string

那么,我应该如何基于作用域变量设置控制器?

PLUNKER

我有一个相关的问题,关于使用作用域变量设置ng-click函数,这个例子here同样适用。

更新

Girafa给了我一个不同的解决问题的思路。 我选择使用一个通用控制器,并基于作用域变量使用switch语句:

<div id="MsgBoxBack" ng-controller="notification">

控制器:

app.controller('MainCtrl', ['$scope', function($scope){
    $scope.notification = {
        ctrl: 'logout', 
        //...
    };
}]);

app.controller('notification', ['$scope', function($scope){
  switch($scope.notification.ctrl) {
    case 'logout':
      console.log('logout');

      //...

      break;
  }

}]);

更新的 Plunker

这并没有解决原问题,但这似乎是一个简单的解决方法。如果有人知道更好的方法,请告诉我,我很乐意更新问题或接受更好的答案。

1个回答

0

尝试使用ngRoute。通过它,您可以将不同的控制器和模板分配给根元素,并通过更改位置在它们之间切换。


我不想改变位置,这应该是一个简单可重用的模态窗口模板,在网站上显示在不同的页面上,并且根据其在特定页面上具有的功能需要不同的控制器。 - orszaczky
那么我会使用不同的元素,并对它们应用ngIf或ngSwitch指令。 - Girafa
或者使用指令定义对象创建一个指令。在指令函数中定义你想要的控制器。 - Girafa
谢谢,我会检查它们并看看是否可以使用! - orszaczky
在Angular中有一个功能。我在文档中没有找到它。但是在指令定义对象中,您可以将字符串传递给控制器参数。因此,您可以在单独的文件中定义控制器,然后通过将其名称简单地传递到指令定义对象中,在指令中使用它。 - Girafa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接