AngularJS,ui-router:将$ stateParams注入NOT匿名函数

时间:2015-11-27 20:51:52

标签: javascript angularjs dependency-injection angular-ui-router angular-ui

我想使用带有AngularJS的ui-router将$ stateParams注入到一个非匿名函数中。

使用匿名函数,我通常会这样做:

.state('app.users', {
     url: '/users/:param1/:param2',
     params: {
         ...
     },
     templateUrl: function($stateParams) { // <----- Here is the anonymous function
         ... do something ...
     },
     resolve: {
         ...
     }
})

我想要做的是用我之前设置的函数替换函数($ stateParams)。类似的东西:

// Here is my function being set before the code, 
// so I can use the same function in multiple states without duplicating code
var myFunction = function (myParam, $stateParams) { 
    ... do something ...
}

... setting the routes on ui-router ...

.state('app.users', {
    ...
    templateUrl: myFunction(myParam, $stateParams), // <--- I want to set that function here, injecting the "$stateParams" at the same time
    ...
}

我想到了解决这个问题的一种方法:创建一个匿名函数,然后在匿名函数中我可以使用$ stateParams注入myFunction。但这感觉不对。

我的问题是:  $ stateParams是如何注入匿名函数的?有没有办法可以在不创建另一个匿名函数的情况下将其注入myFunction

1 个答案:

答案 0 :(得分:2)

适合做

 templateUrl: myFunction,

Angular使用$injector.invoke$injector.instantiate进行依赖注入(在这种情况下是前者),都在内部使用$injector.annotate来确定应该注入哪些依赖项。 $injector.annotate parses带有正则表达式的被调用函数的签名,并获取依赖项的名称。

还需要为myFunction提供annotation,以便在缩小的JS中正确注释。