我遇到的问题是不确定是Angular的限制(可能)还是我对Angular的了解的限制(可能)。

我正在尝试采用一系列控制器,并动态创建/加载它们。我有一个工作到控制器可以运行且可以访问根作用域的原型,但是我不能将ng-controller动态附加到div以便将控制器封装到它们自己的本地作用域中。

问题在于模板是绑定到根作用域的,而不是它们自己的作用域的。

我的示例有望更好地解释我的难题。

JSFiddle:http://jsfiddle.net/PT5BG/22/(最新更新16:30 BST)

为什么这样做是没有道理的,但是我已经将这个概念从正在创建的更大的系统中撤出了。如果您还有其他建议,请遵循以下法律:


控制器不能硬编码,必须从数组构建
作用域不能在控制器之间共享,它们必须具有自己的作用域


AngularJS上的文档并不全面,所以我希望这里的人能为您提供帮助!

最佳答案

您只需传递控制器名称并使用$controller服务,然后将本地变量传递给它即可。您需要某种ModuleCtrl事物来协调所有这些。这是一个可以满足您需求的基本示例。

http://jsfiddle.net/PT5BG/62/

angular.module('app', [])
.controller('AppCtrl', function ($scope, $controller) {
    $scope.modules = [
        { name: "Foo", controller: "FooCtrl" },
        { name: "Bar", controller: "BarCtrl" }]
})
.controller('ModuleCtrl', function ($scope, $rootScope, $controller) {
    $controller($scope.module.controller, { $rootScope: $rootScope, $scope: $scope });
})
.controller('FooCtrl', function ($rootScope, $scope) {
    $rootScope.rootMessage = "I am foo";
    $scope.localMessage = "I am foo";
    console.log("Foo here");
})
.controller('BarCtrl', function ($rootScope, $scope) {
    $rootScope.rootMessage = "I am bar";
    $scope.localMessage = "I am bar";
    console.log("Bar here");
});

关于angularjs - 动态加载具有自己作用域的 Controller ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19407541/

10-13 01:30