【问题标题】:AngularJS set ng-controller with scope variablesAngularJS 使用范围变量设置 ng-controller
【发布时间】:2014-10-16 17:19:58
【问题描述】:

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

<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;
  }

}]);

UPDATED PLUNKER

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

【问题讨论】:

    标签: javascript angularjs angularjs-scope


    【解决方案1】:

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

    【讨论】:

    • 我不想更改位置,这应该是一个简单的可重复使用的模态窗口模板,它显示在网站的不同页面中,并且需要不同的控制器,具体取决于它具有的功能在那个特定的页面上..
    • 我会使用不同的元素并应用 ngIf 或 ngSwitch 指令。
    • 或者使用指令定义对象创建指令。并在指令函数中定义你想要的控制器
    • 谢谢,我去看看能不能用!
    • angular中有一个特性。我没有在文档中找到它。但是在指令定义对象中,您可以将字符串传递给控制器​​参数。所以你可以在一个单独的文件中定义你的控制器,然后在你的指令中使用它,只需将它的名称传递给你的指令定义对象。
    猜你喜欢
    • 2014-12-12
    • 1970-01-01
    • 2013-07-23
    • 2014-02-17
    • 2016-12-24
    • 2018-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多