У меня есть большой список служб и контроллеров, которые создаются, когда сайт загружается первым, а затем я вызываю angular.bootstrap. Затем, позже, я хотел бы запустить какой-то произвольный код, который может быть введен в зависимость. То, как я это делаю, - это создать функцию, указав ее зависимости с аннотациями, получить инжектор для модуля, который я использовал, а затем вызвать вызов этой функции.angularjs: invoke создает новые услуги
Я использую requirejs для загрузки этого плагина и любого другого плагина, так что это то, что возвращается из модуля. код выглядит следующим образом
define [
'scripts/inherits/basePlugin'
] , (BasePlugin) ->
# The explicit block lists the angular services/factories you need
# all game logic/entity classes go inside this block
explicit = (Options, Renderer) ->
class Checkers extends BasePlugin.Plugin
constructor:() ->
super()
@checkersOptions = [
[
"checkbox",
"test checkbox",
false
],
[
"slider",
"test slider",
0, 3, 1
],
[
"textbox",
"test textbox",
"this is some text"
],
[
"dropdown",
"test dropdown",
["blah", "blah2", "blah3"],
"blah2"
]
]
Options.addPage "Checkers", @checkersOptions
selectEntities: (renderer, turn, x, y) ->
verifyEntities:(renderer, turn, selection) ->
getName:() -> 'Checkers'
predraw: (turn, dt, renderer) ->
postdraw: (turn, dt, renderer) ->
resize: (renderer) ->
loadGame: (@gamedata, renderer) ->
getSexpScheme:() -> null
return Checkers
# the dependencies are manually injected here
explicit.$inject = ['Options', 'Renderer']
$injector = angular.injector(['webvisApp'])
# the constructor function for the main checkers object is returned here
return $injector.invoke(explicit)
Теперь в конце концов, я пытаюсь вернуть класс прототип «Шашки» здесь, который имеет доступ к угловым служб «Параметры» и «Renderer». В конце, когда я вызываю invoke, он запускается без жалобы, но по какой-то причине две службы повторно создаются, как в конструкторах для этих двух служб, вызываются снова, уничтожая любые данные, которые они ранее имели. Почему вызов вызывает восстановление этих служб?
EDIT: РЕШЕНИЕ: Оказалось, что функция форсунки создает новые инжекторы вместо использования в вашем модуле. мое решение было это:
# make your module
webvisApp = angular.module 'webvisApp', [
'ngCookies'
'ngSanitize'
'ngRoute'
'ui.bootstrap'
]
# attach injector to publicly accessible member
webvisApp.run ($injector) ->
webvisApp.injector = $injector
# create your controllers and services
# bootstrap the application
angular.bootstrap document, ['webvisApp']
Затем вызвать некоторую функцию с зависимостями:
needsDependencies = (Renderer, Options) ->
#do stuff
needsDependencies.$inject = ['Renderer', 'Options']
webvisApp = angular.module('webvisApp')
webvisApp.injector.invoke needsDependencies
Именно так. Не совсем понимаю, какой вариант использования для такого нового инжектора, но что бы это ни было. Во время блока выполнения модуля, после начальной загрузки и всех поставщиков, я прикрепляю к нему модуль $ injector, например webvisApp.injector = $ injector. и тогда я смог ввести абортивные функции, такие как webvisApp.injector.invoke funcName. Работал как шарм. Благодаря! – FatalCatharsis