【发布时间】:2016-10-18 10:16:27
【问题描述】:
我的 ui 路由状态如下:
.state('projects', {
abstract: true,
url: "/?username&token",
templateUrl: "projects/views/Projects.html",
controller: 'ProjectController'
})
.state('projects.mine', {
url: "mine",
templateUrl: 'projects/views/ProjectsMine.html'
})
.state('projects.all', {
url: "all",
templateUrl: 'projects/views/ProjectsAll.html'
})
我做了一个指令:
app.directive('description', function(){
return{
restrict: 'E',
templateUrl : 'projects/views/directives/ProjectDescription.html',
controller:ProjectController
}
});
我为状态templateUrls制作了两个完全相同的文件,唯一的区别是所有的模板都使用了描述指令,例如:
<description></description>
另一个使用 templateUrl 的内容作为 description 指令(复制 1on1),当不使用指令但 templateUrl 文件的内容重新加载不会发生。
一切正常,但是当我转到“所有”路线时,ProjectController 会重新加载。 该指令如下所示:"
<table>
<tr >
<td><b>name</b> </td>
<td>{{project.name}}</td>
</tr>
<tr >
<td><b>owner</b> </td>
<td>{{project.owner}}</td>
</tr>
<table>
指令以 ng-repeat 的形式添加(处于“全部”状态):
<div ng-repeat="project in project|filter:searchText">
<description></description>
</div>
链接到我的 html 中的状态:
<a ui-sref=".mine()"><button>my projects</button></a>
<a ui-sref=".all()"><button>all projects</button></a>
<div ui-view></div>
另一个“我的”使用指令的内容并重新加载控制器。 当从“我的”转到“全部”时,当我从“我的”转到“全部”时,控制器不会重新加载
如何保持一切原样但避免重新加载控制器?
【问题讨论】:
-
控制器和指令不是持久的。如果您想要持久数据,请使用服务
-
@lightswitch05 我使用服务来获取数据。在控制器中,因此我使用项目的嵌套状态在表之间切换。 angular-ui.github.io/ui-router/#nested-states--views
-
我明白了,我误解了你的目标。您希望
projects.mine继承自projects.all,并对列表应用额外的过滤器。不知道如何使用 UI-Router 做到这一点。但这绝对是一个 UI-Router 问题。您可能想改写标题和问题以澄清这不是一个简单的控制器和指令问题 -
@lightswitch05 不,我有一个页面,其中我为不同的表使用了两个嵌套状态,例如这里embed.plnkr.co/IzimSVsstarlFviAm7S7/preview,其中“列表”和“段落”这两个嵌套状态都有不同的模板。一个使用指令,另一个使用dosnt,带有指令的一个使我的控制器重新加载,一个没有指令的dosnt。我不希望控制器重新加载,因为数据不需要重新加载。
标签: javascript angularjs angular-ui-router