具有多个视图的angular ui路由器状态&控制器实例化
angular ui-router states with multiple views & controller instantiation
好吧,我在angular和ui路由器方面有相当多的经验,但在我的应用程序架构方面遇到了问题。我有一些状态,比如:
main.module.js
.state('main', {
abstract: true,
controller: 'MainCtrl',
template: '<div ui-view />'
}).state('main.clients', {
url: '/clients/:id',
views: {
list: {controller: 'ClientListCtrl', templateUrl: 'client-list.html'},
detail: {controller: 'ClientDetailCtrl', templateUrl: 'client-detail.html'}
}
}.state('main.services', {
url: '/services/:id',
views: {
list: {...},
detail: {...}
}
}
main.html
<div>
<div ui-view='list'></div>
<div ui-view='detail'></div>
</div>
客户端列表.html
<ul>
<li data-ng-click='$state.go('main.clients({id: client.id})'
data-ng-repeat='client in clients'>
{{client.name}}
</li>
</ul>
这一切似乎都很好,视图也像我所期望的那样被填充。我的主要问题是,当我处于main.clients
状态,用户单击客户端名称时,$state.go(...)
会启动,它会重新初始化ClientListCtrl
和ClientDetailCtrl
,尽管状态实际上没有改变(嗯,url的:id
部分确实改变了)。
我是否滥用了多个视图?改变架构是否可取?我只是想知道如何以最有效的方式构建它,在这种情况下,控制器重新初始化似乎没有必要,但我可能遗漏了一些东西。谢谢
在99%的情况下,重新加载状态或其参数更改是我们想要的。新参数意味着不同的列表/详细信息。
但有一个设置:
重新加载搜索
布尔值(默认值true)。如果为false,则不会因为搜索/查询参数已更改而重新触发相同的状态。当您希望在不触发重载的情况下修改$location.search()时非常有用。
我在这里创建了一个示例,展示了如何在搜索时打开重载。
- 状态变化确实会触发重新加载
- 参数更改不会
代码段:
.state('index', {
url: '/index/:area',
...
})
.state('index.detail', {
url: '/detail/:id',
reloadOnSearch : false,
...
可以说,默认行为是我们所需要的,即使使用解析器也是如此。但是检查此处的操作更改
相关文章:
- jquery点击函数select&取消选择
- 事件和状态
- Windows8应用程序(html&Javascript):从图片库(除了文件选择器)显示图像的另一种方式
- 获取选择框的状态
- Angular js-返回一个包含类似
- 一点javascript元编程&可链接的设置器
- 相位器状态未捕获参考错误
- 如何更改reactjs中外部/独立组件的状态或属性
- 如何使用密码检测网络中的状态连接
- Ember.js-接口状态应该存储在哪里
- 混合 ui-sref 和 $state.go 在 Angular ui-router 中进行状态转换
- 通过JSON&比较时间
- Jquery模板,如果xx&&如果yy
- AngularJS&Google可视化-使用状态更改处理程序(Google API)在HTML页面上查看$sco
- 更新Redux状态&然后在同一实例中获取更新状态
- 使用jQuery&/或CSS,以在悬停时放大图像并保持选中状态
- 具有多个视图的angular ui路由器状态&控制器实例化
- HTML5&Javascript,iPhone文件上传,防止手机进入睡眠状态
- 将图像从移动web应用程序(PhoneGap&JavaScript)上载到SOAP web服务返回状态0
- Angular&高图表.通过程序将状态设置为悬停