我想使用带有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
?
答案 0 :(得分:2)
适合做
templateUrl: myFunction,
Angular使用$injector.invoke或$injector.instantiate进行依赖注入(在这种情况下是前者),都在内部使用$injector.annotate来确定应该注入哪些依赖项。 $injector.annotate
parses带有正则表达式的被调用函数的签名,并获取依赖项的名称。
还需要为myFunction
提供annotation,以便在缩小的JS中正确注释。