2014-01-16 100 views
7

我有一个情况,我有一个角控制器,它基本上只是根据点击事件加载html模板。但是,这些模板由自己的控制器管理。这导致控制器是原来的控制器,这似乎只是错误在另一个控制器内的角ng-include控制器

<div ng-controller="WindowCtrl" id="focus-window"> 

    <button ng-click="openProjects()">Show Projects</button> 
    <button ng-click="openTasks()">Show Tasks</button> 
    <div ng-include src="template.url"></div> 

</div> 

controllers.js

.controller('WindowCtrl', function ($scope) { 
    $scope.templates = [ 
     { 
     name: 'tasks', 
     url: 'partials/_tasks.html'}, 
    { 
     name: 'projects', 
     url: 'partials/_projects.html'} 
    ]; 
    $scope.template = $scope.templates[0]; 

    $scope.openProjects = function() { 
     $scope.template = $scope.templates[1]; 
    }; 
    $scope.openTasks = function() { 
     $scope.template = $scope.templates[0]; 
    }; 
}); 

_projects.html

<div ng-controller="ProjectsCtrl"> 
    <h2>My Projects</h2> 
    ...    
</div> 

_tasks.html

<div ng-controller="TasksCtrl"> 
    <h2>My Tasks</h2> 
    ...    
</div> 

我的问题是 - 什么是什么,我想,而不会引起冲突的范围做了最好的解决方案?

任何帮助非常感谢。

回答

4

所以,我其实认为你的方法是正确的。我将其基于controllers的AngularJS文档(“Demo”部分显示了一个简单的嵌套控制器层次结构)。

此外,这与表单指令的工作原理非常相似。它为表单本身创建一个范围,对整个表单评估$ pristine,$ dirty,$ valid和$ invalid。如果所有子范围的计算结果均为true,那么这些值也只能为真(换句话说,如果所有输入都返回为$有效,那么表单只有$有效)。这是通过嵌套的作用域层次结构完成的,所以如果Angular以基本方式进行,则应用程序可以以类似的方式进行操作。

+0

尽管...如果您不想将这些内容留在同一页面上,也可以考虑将每次点击路由到不同的网址,因为Angular看起来好像用户在同一页面上。 – user3043124

+0

问题是我已经有路由做其他动态负载的内容。在这里这样做并跟踪其他部分的状态似乎会很快变得非常复杂。如果嵌套控制器不是罪*本身*然后我会去那里,并保持'WindowCtrl'尽可能简单。 –

相关问题