AngularJS, пользовательский интерфейс: добавьте $ stateParams в НЕ анонимную функцию

0

Я хочу добавить $ 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 без создания другой анонимной функции?

  • 0
    Какова цель функции, которую вы хотите использовать для templatUrl?
  • 0
    @mindparse Так что я могу использовать одну и ту же функцию в нескольких состояниях без дублирования кода
Теги:
dependency-injection
angular-ui-router
angular-ui

1 ответ

2
Лучший ответ

Уместно делать

 templateUrl: myFunction,

Угловое использует либо $ injector.invoke, либо $ injector.instantiate для инъекции зависимостей (это в этом случае первый), оба используют $ injector.nnate внутри, чтобы выяснить, какие зависимости следует вводить. $injector.annotate анализирует сигнатуру вызываемой функции с регулярным выражением и получает имена зависимостей.

Также необходимо предоставить аннотацию для myFunction чтобы ее можно было аннотировать должным образом в мини-JS.

  • 0
    Если я не передам никаких других аргументов в myFunction кроме $ stateParams, это прекрасно работает! Но это все равно не сработает, если я попытаюсь передать аргумент, такой как: function myFunction (firstArgument, $stateParams) есть мысли по этому function myFunction (firstArgument, $stateParams) ?
  • 0
    Забыл упомянуть, что templateUrl: myFunction('users', $stateParams), не работает, и это проблема. И я не могу оставить второй параметр пустым
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню