重用`ui-route`控制器,它需要一个`resolve`d参数

时间:2015-03-13 01:37:24

标签: javascript angularjs controller angular-ui-router

我希望能够重用我的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属性。

1 个答案:

答案 0 :(得分:1)

在我的情况下,这是一个类似但有限的子案例,我有多个ui-router路由定义了resolve() 只有一个地方 控制器通过ng-controller在模板中实例化,在这种情况下传递给控制器​​的值是一个已知的常量值。

在这种情况下,你可以简单地做

.value('detailData', 'here goes the default/fallback value')

如果您有ng-controller的多个用法应该有不同的detailData,那么您需要找到更好的解决方案。