javascript - AngularJS,ui-路由器: Inject $stateParams into NOT anonymous function

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

我想使用 ui-router 和 AngularJS 将 $stateParams 注入(inject)到一个非匿名函数中。

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

.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
    ...
}

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

我的问题是: $stateParams 如何注入(inject)到匿名函数中?有什么方法可以将其注入(inject) myFunction 而不创建另一个匿名函数吗?

最佳答案

这样做是适当的

 templateUrl: myFunction,

Angular 使用 $injector.invoke$injector.instantiate对于依赖注入(inject)(在本例中是前者),两者都使用 $injector.annotate在内部找出应该注入(inject)哪些依赖项。 $injector.annotate parses使用正则表达式对被调用函数进行签名并获取依赖项名称。

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

关于javascript - AngularJS,ui-路由器: Inject $stateParams into NOT anonymous function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33964642/

相关文章:

javascript - Ember.js 为特定模型 ID 添加 css 类

javascript - 使用 vanilla Javascript 查找 ID 包含字符串的所有 DOM 元素

javascript - Node JS Jasmine 使用 jasmine.any() 测试多种类型

javascript - 将在所有其他复选框上切换选中的 AngularJs 复选框

带有多个标记的 AngularJS 谷歌地图

java - 如何向应用程序上下文注册 bean 集合并使其符合 Autowiring 条件?

javascript - 谁能告诉我为什么我的 JQuery 插件不起作用?我仔细按照步骤

AngularJS:混淆 $scope 中的对象引用

c# - 如何在 MVC 中实例化服务

c# - 设计依赖注入(inject)和单个数据上下文的重用