AngularJS ng-click сломан внутри popover - программирование

AngularJS ng-click сломан внутри popover

Я пытаюсь написать директиву для загрузки частичного html файла, скомпилировать его в области видимости и использовать его в качестве содержимого Popup popover.

Однако я застрял на очень базовом шаге, напишу метод hide() в области popover, чтобы я мог легко закрыть его с помощью ng-click=hide().


Это было решено, и plunker теперь охватывает другие проблемы; -).

UPDATE: plunker на помощь: http://plnkr.co/edit/QH3NQh?p=preview

.directive('uiPopover', ['$compile', '$http', function($compile, $http) {
return {
    restrict: 'A',
    scope: {
        hide: '&hide' // did not understand what is this
    },
    link: function postLink(scope, element, attr, ctrl) {
        console.warn('postLink', arguments, this);

        // scope is the anchor scope
        scope.name = "Hello"; // Using {{name}} is working
        scope.hide = function() { // Using ng-click="hide()" is not working :(
            console.log('in');
            element.popover('hide');
        }

        $http.get(attr.uiPopover).success(function(data) {
            element.popover({
                content: $compile(data)(scope), // popover content will get a new scope that I need to put hide() on.
                html: true
            });
        });


    }
}
}]);
4b9b3361

Ответ 1

Смотрите этот поток группы google, в частности Andy fiddle. Сложно кажется, что виджет/компонент popover создает новый элемент DOM, который находится за пределами области действия, где указана директива ui-popover.

Ответ 2

Мое решение такое же, но для того, что стоит, это фрагмент кода, который я использую. Надеюсь, это поможет!

//Initialize & config popover controls
$('[data-toggle="popover"]').popover({ html : true })
    .click(function(ev) {
     //this is workaround needed in order to make ng-click work inside of popover
     $compile($('.popover.in').contents())($scope);
});

И не забудьте включить $compile и $scope в зависимость.

Ответ 3

Мне пришлось использовать $compile(tip.contents())(scope); после создания подсказки (путем привязки "click"). Проверьте Plunker на решение.

Ответ 4

посмотрите здесь, как вы можете помочь вам и многое другое. я думаю, это потрясающе)

это часть библиотеки Angular-Strap