1

У меня есть контроллер, используемый модальным видом (с угловым). В какой-то момент я хотел бы использовать этот контроллер с пользовательским представлением (не модальным). Так что все хорошо, за исключением переменных разрешения (переменных, отправленных на контроллер).Используйте modal ng-controller как обычный контроллер

Я называю модальный так:

var modalInstance = $modal.open({ 
     templateUrl: 'myModal.html', 
     controller: 'modalCtrl', 
     size: 'lg', 
     resolve: { 
      variable: function(){ 
       return myVar; 
      } 
     } 
    }); 

Как я могу отправить переменных из JavaScript (или HTML)?

Вот как я самонастройки мой пользовательский вид (custom.html):

angular.element($(document.body)[0].children[0]).attr('ng-controller','modalCtrl'); 
angular.bootstrap(document.body, [ 'myApp' ]); 

ответ

1

Один из способов сделать это было бы определить услугу или значение с тем же именем вашей решимости (variable в этом дело). Затем Angular найдет для вас зависимость и приложит ее.

Возможно, вы не захотите, чтобы эта служба/значение были определены. Таким образом, вы можете определить этот сервис/значение в модуле, а затем условно загрузить модуль при начальной загрузке приложения:

if (someCondition) { 
    angular.module('use.me.conditionally', []).value('variables', 123); 
    angular.element($(document.body)[0].children[0]).attr('ng-controller','modalCtrl'); 
    angular.bootstrap(document.body, ['myApp', 'use.me.conditionally']); 
} else { 
    angular.bootstrap(document.body, ['myApp']); 
} 

EDIT:

Вы можете использовать value() или service() функции объявить инъекционными объекты, которые имеют много свойств:

var foo = { property1: 'abc', property2: 456 }; 
angular.module('use.me.conditionally',[]) 
    .value('variablesAsAValue', foo) 
    .service('variablesAsAService', function() { return foo; }); 

Обратите внимание, что вам не нужно как value() и service(), я просто шоу оба подхода. value() обычно используется для постоянного типа переменных, а услугами обычно являются объекты/классы.

+0

Спасибо, но как я могу добавить несколько переменных? Должен ли я изменить имя значения (use.me.conditional) для каждой переменной? Могу ли я поместить их все один раз или добавить их в цикл? – ncohen

+0

@ncohen Я отредактирую свой ответ, вы можете передать объект, используя метод 'value()' или 'service()'. –

+0

@ncohen Также не беспокойтесь слишком много о модуле (в моем примере «use.me.condtionally»), вам действительно не нужен дополнительный модуль. Вы можете использовать свой существующий модуль «myApp» точно так же. Я предложил только отдельный модуль, если вы захотите иногда не использовать этот модальный контроллер и, следовательно, не нуждаетесь в значении/службе. –

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