jquery-ui – 从angular打开一个jquery对话框的最佳实践是什么?

前端之家收集整理的这篇文章主要介绍了jquery-ui – 从angular打开一个jquery对话框的最佳实践是什么?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
heres的html:
<div ng-controller="MyCtrl">
    <a ng-click="open()">Open Dialog</a>
    <div id="modal-to-open" title="My Title" ui-jq="dialog" ui-options="{width: 350,autoOpen: false,modal: true}">
        Dialog Text
    </div>
</div>

这里是js:

function MyCtrl($scope) 
{
    $scope.open = function () {
        $('#modal-to-open').dialog('open');
    }
}

这是最好的方式去这样做吗?看起来可能有一个更好的方式打开它,而无需访问DOM,但我不知道我会怎么去。上面的代码工作,我只是想知道是否这是我应该去这样做的方式。欢迎任何输入。

解决方法

“最佳实践”在这里模糊的地方。如果它可读,它的工作,那么你是90%那里,IMO,这可能是好的。

也就是说,“有角度的方式”是保持DOM操纵出控制器,并使用依赖注入,以确保一切都可测试。显然,上面说明的方式很难测试,并且在控制器中放置一些DOM操作。

我想我会做什么来获取DOM操纵出控制器是使用指令:

一个简单的指令,将对话框打开调用与单击元素:

app.directive('openDialog',function(){
    return {
        restrict: 'A',link: function(scope,elem,attr,ctrl) {
            var dialogId = '#' + attr.openDialog;
            elem.bind('click',function(e) {
                $(dialogId).dialog('open');
            });
        }
    };
});

标记中它会像这样使用:

<button open-dialog="modal-to-open">Open Dialog</button>

现在,这显然是非常基本的。如果你想要的话,你可以得到相当高级的,为对话框中的不同选项添加额外的属性

你可以更进一步,并添加一个服务,为您打开对话框,所以你可以将它注入到你的控制器,甚至是你的指令,并得到那里的电话。例如:

app.factory('dialogService',[function() {
    return {
        open: function(elementId) {
            $(elementId).dialog('open');
        }
    };
}]);

这里正在使用。它似乎愚蠢,因为它本质上是一样的事情。但这主要是因为它是一个非常简单的例子。但它至少利用DI和是可测试的。

app.controller('MyCtrl',function($scope,dialogService) {
    $scope.open = function () {
        dialogService.open('#modal-to-open');
    };
});

无论如何。我希望所有这些都能帮助你决定你想要走什么路径。有一千种方法来做到这一点。 “正确的”方式是什么工作,允许你做任何你需要做的事情(测试或任何其他),并且易于维护。

猜你在找的jQuery相关文章