我希望能够重用我的ui-router
- 有线控制器。他们目前从ui-router
resolve
接收参数以呈现其模板。我可以在没有ui-router
的情况下重用那些控制器吗?
例如,我使用ui-router
执行此操作:
.controller('DetailController', function ($scope, detailData) {
$scope.controllerDetail = detailData + "is awesome!";
})
.config(function ($stateprovider) {
$stateprovider.state('detailState', {
resolve: {
detailData: function () { return "John Doe"; }
},
template: '<p>{{ controllerDetail }}</p>',
controller: 'DetailController'
}
}
现在,我想使用相同的控制器在其他地方渲染一个固定的子面板。例如:
<master ng-init='childData="Jane Smith"'>
<detail ng-controller='DetailController' ng-controller-params="{ detailData : childData">
<p>{{ controllerDetail }}</p>
</detail>
</master>
当然,实际上,实际上有模板文件,控制器中的一些功能值得重复删除。此外,第一个示例中的resolve
数据和第二个示例中的init
数据都通过网络到达,但在第二个示例中,它作为更大请求的子对象而不是单独 - 导航项目。另外,我在指令中指定我的控制器,而不是通过HTML属性。
答案 0 :(得分:1)
在我的情况下,这是一个类似但有限的子案例,我有多个ui-router
路由定义了resolve()
, 只有一个地方 控制器通过ng-controller
在模板中实例化,在这种情况下传递给控制器的值是一个已知的常量值。
在这种情况下,你可以简单地做
.value('detailData', 'here goes the default/fallback value')
如果您有ng-controller
的多个用法应该有不同的detailData
,那么您需要找到更好的解决方案。