С Новым годом! Форум программистов, компьютерный форум, киберфорум
Angular/AngularJS
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/9: Рейтинг темы: голосов - 9, средняя оценка - 4.56
1 / 1 / 0
Регистрация: 13.10.2012
Сообщений: 125

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

31.05.2015, 14:26. Показов 2049. Ответов 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
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
31.05.2015, 14:26
Ответы с готовыми решениями:

Куда правильнее встроить динамически сгенерированный js в MVC
В общем вопрос следующий, куда правильнее запихнуть js код в MVC фреймворк. Сейчас у меня PHP генерирует js в контроллере, но является ли...

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

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

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

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

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

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

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

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

Да, рендеринг на клиенте нужен.
0
134 / 130 / 57
Регистрация: 29.12.2011
Сообщений: 359
31.05.2015, 17:49
Но в вашем примере контроллер и не генерится, вот что я не понимаю
0
1 / 1 / 0
Регистрация: 13.10.2012
Сообщений: 125
31.05.2015, 17:58  [ТС]
Цитата Сообщение от JokerNN Посмотреть сообщение
Но в вашем примере контроллер и не генерится, вот что я не понимаю
окей, " Добавить динамически сгенерированное объявление контроллера ",
вероятно я не совсем точно определил вопрос, однако же из первого постаю скорее всего ясно было, что я имею ввиду.
0
15 / 15 / 3
Регистрация: 31.08.2013
Сообщений: 98
31.05.2015, 19:00
Вам нужно скомпилировать ваш html код
JavaScript
1
var template = $compile(html)($scope)
После этого если вы вставите вашу переменную template в html на странице, у Вас должны заработать ангуларовские директивы
0
1 / 1 / 0
Регистрация: 13.10.2012
Сообщений: 125
31.05.2015, 19:20  [ТС]
так вот, это как раз то что сделал. вот функция из 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
15 / 15 / 3
Регистрация: 31.08.2013
Сообщений: 98
31.05.2015, 19:55
Порядок должен быть не таким, сначала вы должны скомпилировать темплейт, а только потом его засунуть в DOM

Добавлено через 3 минуты
http://jsfiddle.net/ftfish/KyEr3/
Не совсем по теме, но как пример, как применять $compile
0
1 / 1 / 0
Регистрация: 13.10.2012
Сообщений: 125
31.05.2015, 20:08  [ТС]
Цитата Сообщение от 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
1 / 1 / 0
Регистрация: 13.10.2012
Сообщений: 125
02.06.2015, 15:53  [ТС]
все так же не выходит,

http://stackoverflow.com/quest... ller-scope

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

может кто помочь? нерешаемая задача на ангуларе?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
02.06.2015, 15:53
Помогаю со студенческими работами здесь

Добавить контроллер в домен
Приветствую. Такая ситуация. Есть домен. В домене один контроллер. На нем установлены роли: AD, DNS, DHCP. Есть еще один сервак. Нужно его...

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru