入侵$ stateProvider

时间:2015-11-09 21:48:47

标签: javascript angularjs angular-ui-router

我需要一种方法来入侵$stateProvider。这就是原因:

angular.module('rects', []).config(($stateProvider)=> {
    $stateProvider.state({
        name: 'rectangles',
        templateUrl: 'list.html',
        controller: 'listController',
        data: {
            foo: 'rectangles foo'
        }
    })
})

angular.module('circles', []).config(($stateProvider)=> {
     $stateProvider.state({
         name: 'circles',
         templateUrl: 'list.html',
         controller: 'listController',
         data: {
            foo: 'circles foo'
         }
     })
})

现在foo出现在$state.current.data的控制器中,这很好。但是现在我需要为矩形调整data,我必须使用另一个服务或工厂来处理数据,我不能在config部分注入另一个服务,我不能使用resolve来抛出额外的进入控制器的东西,因为那时我会遇到依赖性问题,或者我必须在resolve中使用的每个状态中使用listController。但也许我可以这样做:

angular.module('rects', []).config(($stateProvider)=> {
    $stateProvider.state({
        ...
        ...
        resolve: {
            $state: function(myFookingService) {
                this.data.foo = myFookingService.fookDatTing('rectangles foo');
                return this;
            }
        }
    })
})

但当然这不起作用。我仍然认为这是可能的,但我无法正确使用语法。

更新:有点找到了方法:

angular.module('rects', []).config(($stateProvider)=> {
    $stateProvider.state({
        name: 'rectangles'
        ...
        ...
        controllerProvider:($state, myFookingService)=> {
            $state.get('rectangles').data.foo = myFookingService.fookDatTing('rectangles foo');
            return 'listController'
        }
    })
})

问题:这种方法有多危险?那可能会在以后咬我屁股吗?

0 个答案:

没有答案