Я хочу добавить $ stateParams в анонимную функцию NOT, используя ui-router с AngularJS.
Используя анонимную функцию, я обычно делал это:
.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
с введенным $ stateParams. Но это не так.
Мой вопрос: как вводить $ stateParams в анонимную функцию? Можно ли каким-либо образом вставить это в myFunction
без создания другой анонимной функции?
Уместно делать
templateUrl: myFunction,
Угловое использует либо $ injector.invoke, либо $ injector.instantiate для инъекции зависимостей (это в этом случае первый), оба используют $ injector.nnate внутри, чтобы выяснить, какие зависимости следует вводить. $injector.annotate
анализирует сигнатуру вызываемой функции с регулярным выражением и получает имена зависимостей.
Также необходимо предоставить аннотацию для myFunction
чтобы ее можно было аннотировать должным образом в мини-JS.
myFunction
кроме $ stateParams, это прекрасно работает! Но это все равно не сработает, если я попытаюсь передать аргумент, такой как: function myFunction (firstArgument, $stateParams)
есть мысли по этому function myFunction (firstArgument, $stateParams)
?
templateUrl: myFunction('users', $stateParams),
не работает, и это проблема. И я не могу оставить второй параметр пустым