将另一个(父)控制器逻辑注入派生状态(angularjs ui-router)

时间:2016-10-04 13:23:00

标签: javascript angularjs angular-ui-router

我遇到了一个问题。我有一个模板URL,但有很多状态变体。我有一个父州,其他州是孩子。现在看起来像这样:

 angular
    .module("StN")
    .config(config);

function config($stateProvider) {
    $stateProvider
        .state("invoice", {
            url: "/invoice",
            templateUrl: "/Scripts/js/stn/invoice/invoice.html",
            controller: "invoiceController as vm"
        })
        .state("invoice.custom", {
            url: "/castom"
        })
        .state("invoice.search", {
            url: "/search?Status?Invoice?"
        });
}

在控制器中我有开关盒结构,我检查当前状态名称并做一些不同的逻辑

angular
   .module("StN")
   .controller("invoiceController", invoiceController);

function invoiceController($http, $state) {
    switch (state.name) {
    case "invoice.search":
        //first logic 
        break;
    case "invoice.custom":
        //second logic
        break;
    case "invoice.status":
        //third logic
        break;
    }
}

我需要为每个状态设置不同的控制器,但是这个控制器必须具有父控制器(invoiceController)的逻辑。我怎么能这样做?

示例

.state("invoice", {
        url: "/invoice",
        templateUrl: "/Scripts/js/stn/invoice/invoice.html",
        controller: "invoiceController as vm"
    })
    .state("invoice.custom", {
        url: "/castom"
        controller: "DerivedinvoiceController as vm" //but it must have logic of base controller
        })

1 个答案:

答案 0 :(得分:0)

你能做的最好。将此逻辑分离到Factory,并在父控制器及其子项中使用此工厂。