Название, вероятно, не имеет смысла, но в основном я хотел бы взять такой объект...
[
{
menuItemTitle: 'Edit Page',
checkPermissions: function($http, $timeout){
// Do something which uses $http or $timeout
}
}
]
У меня есть директива меню, которая должна проходить через массив, и для каждого элемента ему нужно проверить, является ли функция.checkPermissions функцией, и если она является функцией, тогда ей необходимо вызвать ее и каким-то образом получить все зависимые данные и разрешить им быть использованным внутри функции, точно так же, как Угловая, когда вы создаете контроллер, фабрику, сервис и т.д.
Я думаю, что функция также должна запускаться в контексте, в котором она была вызвана, чтобы другие переменные в исходном контексте также были доступны на "этом" объекте, например
var siteId = 'google.com'
var menu = [
{
menuItemTitle: 'Edit Page',
checkPermissions: function($http, $timeout){
if(siteId === 'google.com'){
$http.get(stuff);
}
}
}
]
Я могу найти множество статей о том, как использовать DI в контроллерах и службах, но не об использовании самой системы инжекторов для выполнения переданных функций, подобных этому, поэтому я предполагаю, что это действительно сложно? Мои навыки JS не растягиваются до понимания основного углового кода, поэтому любая помощь будет действительно оценена.
Он должен использоваться так же, как и в Угловых и сторонних библиотеках для функций с поддержкой DI, $injector.invoke
.
Он в основном вызывает checkPermissions
(который должен быть функцией или встроенной аннотацией массива) с соответствующими зависимостями в качестве параметров, в качестве this
контекста для функции может быть предоставлен необязательный аргумент.
var checkPermissionsResult = $injector.invoke(checkPermissions, this);
this
в качестве контекста исполнения, а обратное часто приводит к боли. invoke
принимает локальные зависимости, как обычно это обрабатывается в Angular. Вы можете сохранить желаемый контекст в виде массива menu
prop и передать его в функцию как $injector.invoke(checkPermissions, null, { context: desiredContext })
, функция checkPermissions
теперь может принимать локальную зависимость context
.