AngularJS Fancybox Popup

时间:2014-04-14 09:57:02

标签: angularjs fancybox

我已经开始了一个angularjs项目,我想实现fancybox。

为此,我已将jQuery和fancybox插件包含在解决方案中。我试图在fancybox窗口中打开下面显示的代码中的模板。

查看

<a href="" ng-click="openPage('popups/add.html')">ADD</a>

控制器

app.controller('MainController',
    function MainController($scope) {
        $scope.user = "Hey Welcome";

        $scope.open = function(template_path){
            $.fancybox({"href":template_path})
        }
    }
)

popup / add.html

<div class="pop-contnr">
    <h2>ADD</h2>
    <table>
        <thead>
            <tr>
                <th align=center>{{user}}</th>
            </tr>
        </thead>
    </table>
</div>

Fancybox成功打开包含模板的窗口,但尚未评估{{user}}表达式。有人可以帮忙吗?

3 个答案:

答案 0 :(得分:9)

我为fancybox

创建了一个指令
app.directive('fancybox',function($compile, $timeout){
    return {
        link: function($scope, element, attrs) {
            element.fancybox({
                hideOnOverlayClick:false,
                hideOnContentClick:false,
                enableEscapeButton:false,
                showNavArrows:false,
                onComplete: function(){
                    $timeout(function(){
                        $compile($("#fancybox-content"))($scope);
                        $scope.$apply();
                        $.fancybox.resize();
                    })
                }
            });
        }
    }
});

答案 1 :(得分:8)

以下是我的团队和我编写的fancybox指令的简化版本,只需点击一下即可打开基于模板的fancybox。

在标记中调用它:

<div fancybox ng-click="openFancybox('templateUrl')"> </div>

该指令的代码是:

app.directive('fancybox', function ($compile, $http) {
    return {
        restrict: 'A',

        controller: function($scope) {
             $scope.openFancybox = function (url) {

                $http.get(url).then(function(response) {
                    if (response.status == 200) {

                        var template = angular.element(response.data);
                        var compiledTemplate = $compile(template);
                        compiledTemplate($scope);

                        $.fancybox.open({ content: template, type: 'html' });
                    }
                });
            };
        }
    };
});

可以看到在plunker

中工作

答案 2 :(得分:1)

我将answer above扩展为使用Angular的模板缓存。

在标记中调用它:

<div fancybox fancybox-template="template.html">Open Fancybox</div>

该指令的代码是:

app.directive('fancybox', function ($templateRequest, $compile) {
    return {
        scope: true,
        restrict: 'A',
        controller: function($scope) {
            $scope.openFancybox = function (url) {
                $templateRequest(url).then(function(html){
                    var template = $compile(html)($scope);
                    $.fancybox.open({ content: template, type: 'html' }); 
                });
            };
        },
        link: function link(scope, elem, attrs) {
            elem.bind('click', function() {
                var url = attrs.fancyboxTemplate;
                scope.openFancybox(url);
            });
        },
    }
});

这里是plunker