Javascript-форум (https://javascript.ru/forum/)
-   Angular.js (https://javascript.ru/forum/angular/)
-   -   Директивы при ajax обновлении из вне (https://javascript.ru/forum/angular/59407-direktivy-pri-ajax-obnovlenii-iz-vne.html)

Wizlight 10.11.2015 03:07

Директивы при ajax обновлении из вне
 
Есть некий блок с директивой edit-block
<div edit-block id="t36">
</div>

Сама директива:
angular
    .module('lessonEdit')
    .directive('editBlock', function() {
        return {
            link: function(scope, element, attrs) {
                element.bind('click', function() {
                    alert('test');
                });
            }
        };
    });

Проблема в том, что после аякс обновления блока с данным тегом - ангуляр уже не видит директиву. Как "возобновить" все директивы в обновленном блоке?

Пользуюсь PHP фреймворком Yii, и там есть функция которая обновляет его виджет - список, вот после этого обновления
$.fn.yiiListView.update('blocks_list', {

            });

и перестают работать директивы

krasovsky 10.11.2015 06:56

Предполагаю, что ты еще и шаблоны с php-тегами делаешь
Ангулар не для этого, он так не работает. Все что с бэкэнда можно посылать на фронэнд, когда там используется ангулар - это json.

Если что то начал делать на ангуларе, на ангуларе надо делать все, в том числе и запросы, иначе пришедший хтмл нужно компилять с текущим scope https://docs.angularjs.org/guide/compiler

Wizlight 10.11.2015 11:30

Проект большой, код переделывается постепенно, виджеты на php трогать не хотел бы. Неужели нет другого выхода?
Читал по форумах - упоминают о $scope.apply(), но что-то не получается, либо не так делаю

krasovsky 10.11.2015 13:34

Цитата:

Сообщение от Wizlight
$scope.apply()

Это для того, что к примеру, бы ангуляр "принял" данные попавшие в scope "снаружи",т.е. из каких то внешних систем.
А что бы хтмл из внешних систем использовать с директивами ангуляра именно compile

Wizlight 10.11.2015 16:20

Спасибо за compile. Не знаю на сколько коряво написал, писал в лоб.
После аякс оновления листа:
var template=angular.element('#blockList').html();
angular.element('#blockList').empty();
angular.element('#blockList').append(($compile(template)(scope)));


Часовой пояс GMT +3, время: 10:26.