Форум программистов, компьютерный форум, киберфорум
Наши страницы
JavaScript: Angular 2, AngularJS
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
opahopa
1 / 1 / 0
Регистрация: 13.10.2012
Сообщений: 125
1

Добавить динамически сгенерированный контроллер

31.05.2015, 14:26. Просмотров 795. Ответов 11
Метки нет (Все метки)

Приветствую! Изучаю AngularJS, встрял с 1н проблемой.

Вот описание, выкладывал на stackoverflow

Проблема - использование сгенеренного контроллера.

JS-функция, в которой генерится контроллер:
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
function Content(i){
    var html =
        '<div ng-controller="Hello">'+
        '<button ng-click="click_btn()">Load Data!</button>'+
            '<div class="panel panel-default">'+
                '<div class="panel-heading">Items List</div>'+
                '<div class="col-sm-8">'+
                    '<ul>'+
                        '<li ng-repeat="element in content"> {{ element }} '</li>'+
                    '</ul>'+
                '</div>'+
            '</div>'+
        '</div>';
 
        var ul = document.getElementById('FullList');
        ul.insertAdjacentHTML('beforeend', html);
        AddElementAngular(contentString);
}
код контроллера:
C#
1
2
3
4
5
6
7
8
9
10
11
12
angular.module('MainPage', [])
    .controller('Hello', function($scope, $http) {
        alert('jijij');
        $scope.click_btn = function() {
            alert('fsdfsdfsd');
        }
 
        $http.get('/api/getlist?groupID=2').
            success(function(data) {
                $scope.content = data;
            });
    });
Собственно в чем проблема - сгенерированный контроллер не попадает в scope модуля.
็HTML страница великовата и содержит много даты для добавления сюда, однако начинается с <html ng-app="MainPage">, модуль инициализируется успешно.

Вставлял функции alert() в разные места кода, чтобы проверить работоспособность. С загрузкой контроллера динамически - не работает. Если просто добавляю не динамически в JS код на страницу - все работает.

Контроллер добавляется динамически на страницу только разово. Если функция Content(i){} вызывается снова - код предыдущего контроллера удаляется.

Нашел такое решение как добавить элемент в scope модуля, однако проблемы не решает. сгенерированный контроллер инициализируется, но не более того:


Javascript
1
2
3
4
5
6
7
8
9
function AddElementAngular(html){
    var $div = $(html);
    $(document.body).append($div);
 
    angular.element(document).injector().invoke(function($compile) {
        var scope = angular.element($div).scope();
        $compile($div)(scope);
    });
}
т.е. при использвании

Javascript
1
2
3
4
5
6
7
angular.module('MainPage', [])
    .controller('Hello', function($scope, $http) {
        alert('jijij');
        $scope.click_btn = function() {
            alert('fsdfsdfsd');
        }
    });
я получаю 'jijij', но на клик - ничего, алерт не вызывается. В консоли отладки JS ошибок нет.

Надо либо развить метод, которым я пытаюсь решить, либо подойти с другой стороны и решить проблему использования генерного контроллера.

П.С. Да, контроллер должен быть генерным, иначе надо добавлять сотни контроллеров. Не генерить контроллер варианта нет.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.05.2015, 14:26
Ответы с готовыми решениями:

Как на динамически созданную панель добавить динамически созданную кнопку?
Добрый день, у меня вопрос как на динамически созданную панель добавить...

Как одной строкой запроса добавить один и тот же сгенерированный UUID в поле Key таблицы1 и в поле Foreign Key таблицы2 ?
У меня получается добавить одним запросом один и тот же UUID в две таблицы. ...

Добавить контроллер в домен
Приветствую. Такая ситуация. Есть домен. В домене один контроллер. На нем...

Добавить контроллер домена в существующий домен
Доброе время суток, что та не могу разобраться. хочу добавить контроллер...

SM контроллер шины, сетевой контроллер и ethernet контроллер
подскажите где скачать sm контроллер шины, сетевой контроллер и ethernet...

11
JokerNN
134 / 130 / 57
Регистрация: 29.12.2011
Сообщений: 359
31.05.2015, 16:01 2
А собственно зачем?

Добавлено через 8 минут
П.С. Да, контроллер должен быть генерным, иначе надо добавлять сотни контроллеров. Не генерить контроллер варианта нет.
То, что у Вас якобы генерится - это html шаблон, и вовсе не контроллер.

То, что надо якобы генерить - должно решаться языком шаблонов ангуляра, мне кажется Вы неверно выбрали путь решения задачи.
1
opahopa
1 / 1 / 0
Регистрация: 13.10.2012
Сообщений: 125
31.05.2015, 16:16  [ТС] 3
Цитата Сообщение от JokerNN Посмотреть сообщение
А собственно зачем?
Сори, не хочу выкладывать всю структуру проекта и т.д, слишком много всего описывать.
Но надо так, это просто "дано" в задаче. Если ангуляром не получится, буду другие решения искать, или все же руками заморочусь сделать просто на js. Суть в том, что "так надо"

почему не контроллер то? контроллер объявляется в хтмл разметке ведь.
Может конечно и не прав, но не хочу спорить об определениях, просто любым подходом нужно решить задачу.

Tам достаточно много еще надо будет в хтмл руками добавлять, не думаю что ангуляром это удобно/или вообще можно сделать.
0
JokerNN
134 / 130 / 57
Регистрация: 29.12.2011
Сообщений: 359
31.05.2015, 16:21 4
Цитата Сообщение от opahopa Посмотреть сообщение
контроллер объявляется в хтмл разметке ведь.
Нет, контроллер это javascript код
angular.module('MainPage', [])
.controller('Hello', function($scope, $http) {
Вот объявление контроллера, а в хтмле - view, ну или template.
Сырой хтмл добавить в ангуляр - ну вот. http://stackoverflow.com/questions/1...-to-controller
Но если это надо делать повсеместно - не думаю что с ангуляром удобно будет вообще это делать.
Если не нужен рендеринг на клиенте, то стоит задуматься вообще нужен ли angularjs.
0
opahopa
1 / 1 / 0
Регистрация: 13.10.2012
Сообщений: 125
31.05.2015, 16:34  [ТС] 5
Хорошо, это объявление. собственно, я и написал 'обьявляется' . это суть вопроса не меняет вроде )

По линку, который вы дали - это добавление хтмл в контроллер, а не контроллера.
Собственно я нашёл один метод добавления контроллера и написал об этом в 1м посте темы. Однако, при его использовании возникает проблема, из-за которой я и создал этот топик.
Не повсеместно, опять же в 1м посте написано, что добавить такой генерный контроллер надо только один.

Да, рендеринг на клиенте нужен.
0
JokerNN
134 / 130 / 57
Регистрация: 29.12.2011
Сообщений: 359
31.05.2015, 17:49 6
Но в вашем примере контроллер и не генерится, вот что я не понимаю
0
opahopa
1 / 1 / 0
Регистрация: 13.10.2012
Сообщений: 125
31.05.2015, 17:58  [ТС] 7
Цитата Сообщение от JokerNN Посмотреть сообщение
Но в вашем примере контроллер и не генерится, вот что я не понимаю
окей, " Добавить динамически сгенерированное объявление контроллера ",
вероятно я не совсем точно определил вопрос, однако же из первого постаю скорее всего ясно было, что я имею ввиду.
0
gggggu
15 / 15 / 3
Регистрация: 31.08.2013
Сообщений: 98
31.05.2015, 19:00 8
Вам нужно скомпилировать ваш html код
Javascript
1
var template = $compile(html)($scope)
После этого если вы вставите вашу переменную template в html на странице, у Вас должны заработать ангуларовские директивы
0
opahopa
1 / 1 / 0
Регистрация: 13.10.2012
Сообщений: 125
31.05.2015, 19:20  [ТС] 9
так вот, это как раз то что сделал. вот функция из 1го поста
Javascript
1
2
3
4
5
6
7
8
9
function AddElementAngular(html){
    var $div = $(html);
    $(document.body).append($div);
 
    angular.element(document).injector().invoke(function($compile) {
        var scope = angular.element($div).scope();
        $compile($div)(scope);
    });
}
и в нем же описана возникающая проблема.
0
gggggu
15 / 15 / 3
Регистрация: 31.08.2013
Сообщений: 98
31.05.2015, 19:55 10
Порядок должен быть не таким, сначала вы должны скомпилировать темплейт, а только потом его засунуть в DOM

Добавлено через 3 минуты
http://jsfiddle.net/ftfish/KyEr3/
Не совсем по теме, но как пример, как применять $compile
0
opahopa
1 / 1 / 0
Регистрация: 13.10.2012
Сообщений: 125
31.05.2015, 20:08  [ТС] 11
Цитата Сообщение от gggggu Посмотреть сообщение
Порядок должен быть не таким, сначала вы должны скомпилировать темплейт, а только потом его засунуть в DOM
т.е так?
Javascript
1
2
3
4
5
6
7
8
9
function AddElementAngular(html){
    var $div = $(html);
 
    angular.element(document).injector().invoke(function($compile) {
        var scope = angular.element($div).scope();
        $compile($div)(scope);
    });
    $(document.body).append($div);
}
но так получаю ошибку Angular'a.
Error: ng:areq
Bad Argument
Argument 'scope' is required
не могли бы вы показать, как правильно надо сделать?
я с ангyлром ранее вообще не работал.
Да и с веб-приложениями тоже, этой первый проект.
back-end API на JAVA+spring MVC написал, в архитектурах разобрался, с принципами front-end вроде тоже, а тут вот с ангуларом встрял.


P.S.
http://jsfiddle.net/ftfish/KyEr3/
Не совсем по теме, но как пример, как применять $compile
Спасибо, это вроде ясно как работает, но у меня дело в том что инициализация генерная. Таких манов и т.д. я видел не мало, можно по этим вопросам найти инфу... а вот с генерацией объявления контроллера - нет нигде примеров.
0
opahopa
1 / 1 / 0
Регистрация: 13.10.2012
Сообщений: 125
02.06.2015, 15:53  [ТС] 12
все так же не выходит,

http://stackoverflow.com/questions/3...ntroller-scope

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

может кто помочь? нерешаемая задача на ангуларе?
0
02.06.2015, 15:53
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.06.2015, 15:53

Динамически добавить textbox
Привет всем. Как можно динамически добавить textbox в заранее существующую...

Динамически добавить UserControl's
Пытаюсь сделать по типу что на видео: Dynamically Loading User Control, но не...

asus K53S -sm контроллер шины -контроллер универсальный последовательной шины USB и с. контроллер
Люди добрые!! помогите пожалуйста найти драйвера на windows 7 32-b -sm...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru