2016-05-11 2 views
0

В AngularJS вы часто строите объект с завода, который обычно занимает другую область функций, а затем контроллер (хотя это может быть моей проблемой проектирования и практики). Предположим, вам нужно выполнить некоторую логику (либо в контроллере, либо в сервисе, независимо от того, что у вас есть), логика должна выполняться в другой области, в которой объект был создан, поэтому конструктор не определен)Ссылка на «экземпляр»/прототип из другой области действия

Например , обычно могут иметь:

Global scope 
    Factory scope 
     - Object returns 
    Controller scope 
      - Injection of factory returns the object 

или в более выгодных условиях:

var x = (function() { 
    function Thing() {} 
    return new Thing(); 
})(); 
//How can I check x is instance of Thing if Thing is not defined in this scope? 

я попытался x instanceof Thing или x.constructor == Thing, но, очевидно, присущая проблема заключается в том, что Thing() конструктор не определен в SCO физическое воспитание Как я могу это преодолеть (или какая там практика), поскольку я предполагаю, что эта проблема довольно неудобна и довольно распространена)?

+0

Почему бы не определить '' 'Thing''' в области видимости фабрики и контроллера? – Daniel

+0

Если вы создаете экземпляр только одного 'Thing' (здесь:' x'), вы не должны делать его классом. Если вы хотите создать несколько экземпляров, вы не должны воссоздавать класс каждый раз. – Bergi

ответ

1

Решение заключается в использовании Углового DI для всего, что вам может понадобиться в приложении.

app 
    .value('Thing', Thing) 
    .factory('thing', function (Thing) { 
     return new Thing; 
    }) 
    .controller('Some', function (thing, Thing) { 
     thing instanceof Thing === true; 
    }); 

    function Thing() { ... } 
+0

Но как я могу создать экземпляр конструктора из этого? –

+0

С 'новой вещью'. См. Сервис 'thing'. – estus

Смежные вопросы