2014-10-16 57 views
2

我有一個模板(用於模式彈出),並且根據其功能,不同的控制器應加載:AngularJS設置NG-控制器範圍內的變量

<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 

S o我應該如何根據範圍變量設置控制器?

PLUNKER

我對與範圍內的變量與此同樣的例子here設置NG-點擊功能相關的問題。

UPDATE

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

這不是解決原的問題,但似乎是一個簡單的解決方法。如果有人知道更好的方法,只需告訴我,我很樂意更新問題或接受更好的答案。

回答

0

嘗試使用ngRoute。有了它,您可以將不同的控制器和模板分配給您的根元素,並通過更改您的位置在它們之間切換。

+0

我不想更改位置,這應該是一個簡單的可重複使用的模式窗口模板,它顯示在網站上的不同頁面中,並且需要不同的控制器,具體取決於它在特定頁面上的功能。 。 – orszaczky 2014-10-16 17:25:22

+0

比我應用ngIf或ngSwitch指令應用於它們的不同元素。 – Girafa 2014-10-16 17:31:52

+0

或者使用指令定義對象創建指令。並在指令函數中定義你想要的控制器 – Girafa 2014-10-16 17:33:07