2015-06-09 4 views
3

Я работаю над проектом с Yii2 и Angular. Структура коды выглядит следующим образом:Перезагрузка/перезагрузка Угловое приложение

<html ng-app="myApp"> 

    <head.../> 
    <body> 
     ... 
     <div class="body-content"> MAIN CONTENT GOES HERE </div> 
     ... 
    </body> 

</html> 

страница содержит заголовок и столбец слева и центральную область, которая оказанная внутри .body-content дел. Теперь, как вы можете себе представить, у меня есть несколько кнопок, некоторые другие угловые виджеты и т. Д.

У Yii2 есть действительно классная функция под названием renderPartial, которая будет повторно отображать файл вида, не перевернув его снова в <head> и <body>. Я использую это для обновления содержимого моей основной области, вызывая эту функцию, получая ответ с помощью jQuery и заменяя содержимое.

Теперь все кнопки, которые привязаны к Угловому, перестают работать (я предполагаю, почему). Мой вопрос: как я могу заставить Angular повторно запускать или повторно привязывать все мои (новые) элементы DOM к их действиям?

+0

http://stackoverflow.com/questions/14994391/thinking-in-angularjs-if-i-have-a-jquery-background – adt

+0

@adt No. Я не переписываю все виджеты, которые Yii предлагая мне только потому, что Angular не может перезагрузить себя. – alexandernst

ответ

2

Вам нужно будет использовать ручной способ загрузки (поясняется в https://docs.angularjs.org/guide/bootstrap) для углового, но это может вызвать утечку памяти во времени, поскольку угловой добавить слушателя на DOM, который вы уничтожаете, и не знает о его удалении, поэтому они остаются , а также для контроллера/директив/привязки и других функций, на которые ссылается ваш код.

Может ли yii2 быть обернуто в угловую директиву?

+0

Не совсем уверен, как это сработает. Да, я могу обернуть все, что захочу, в директиве, но что бы это сделать? Или вы имеете в виду обертывание всего содержимого 'body-content' в директиве? – alexandernst

+0

Я не знаю много о структуре yii2, но я предполагаю, что это javascript librairy, что вы можете указать, что делать с помощью каких-то типов шаблонов , вы можете зарегистрировать директиву в угловом выражении, которая заменит «body-content» и визуализирует внутреннюю рамки yii2, как обычно, вы могли бы переустановить угловую директиву, как это объясняется в http: // stackoverflow.com/questions/22080351/how-to-re-render-a-template-in-an-angle-directive и угловым будет заботиться о анализе атрибутов html и делать это волшебство. – zeachco

+0

@ VladTheLad благодарит вас за то, что заметил, что Yii2 был базой рендеринга бэкэнда, это более противоречиво, чем я ожидал. Лучше выбрать тот или другой, иначе вы бы прошли очень сложный и хакерский путь, чтобы сделать эту работу. Возможно, Yii2 может отображать угловые шаблоны, используемые в приложении. – zeachco

0

Я не уверен, правильно ли я прав: вы используете фреймворк frontend и бэкэнд-фрейм, чтобы управлять своим интерфейсом, а последний предоставляет новый контент DOM, который вы вводите в свой HTML?

Насколько я понял, Angular лучше всего обрабатывает все, получая данные (будь то из бэкэнда в JSON или в другом формате по вашему выбору), а не новые элементы DOM.

Угловое само связывается с любыми узлами DOM, к которым он добавлен, обрабатывает контент и инъекцию зависимостей и, таким образом, отображает ваши данные. В вашем случае бэкэнд-инфраструктура PHP, похоже, передает новые элементы DOM, которые Angular думает о «Эй, вы не хотите, чтобы я добавлял их? Отлично, тогда я этого не делаю». и перерывы.

Возможно, существуют решения для этого конкретного случая, но если бы я был вами, я бы переосмыслил концепцию с точки зрения «Где я хочу, чтобы мои представления/шаблоны были визуализированы? Какая часть всего несет ответственность за что?» Использование двух разных фреймворков, не говоря уже о языках, для выполнения одной и той же работы и вмешательства друг в друга, создало бы беспорядок, который я бы не хотел очищать.

Итак, если вам нравится эта функция Yii2 и вы хотите заставить ее работать, хорошо, но в этом случае - для чего вам нужно угловое? И если вы предпочитаете придерживаться Angular, у вас просто есть бэкэнд, который обрабатывает данные и передает их обратно в интерфейс, чтобы сделать это с ним.

+0

Я использую Yii2 для большинства вещей и Angular для обработки некоторых случаев кросс, где было бы легче контролировать пользователя в посылке с угловым, а не с Yii2. Я делаю это, потому что это быстрее и проще (не забывайте, что Angular все еще DIY с тоннами директив, в то время как Yii2 имеет массу готовых к использованию вещей). – alexandernst

+0

Mh, я все еще уверен, что вам будет лучше без углового (из всего, что я слышу, React может быть вашим лучшим кандидатом, havent работал с ним, хотя) в этом случае - если управление вводом - это то, что вы ищете, полномасштабный MVVC возможно, не самый лучший выбор. ;) – VladTheLad

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