继承人的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的情况下将其打开,但是我不确定该如何处理。上面的代码有效,我只是想知道这是否是我应该这样做的方法。欢迎任何输入。
这里的“最佳实践”是模糊的基础。如果它可读并且可以工作,那么IMO,您就90%了,这可能还不错。
也就是说,“角度方式”是将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');
};
});
无论如何。我希望所有这些都能帮助您决定要走的路。有上千种方法可以做到这一点。“正确”的方法是可行的,它允许您执行所需的任何操作(测试或其他任何操作),并且易于维护。
问题内容: 我刚开始学习Go,并通读现有代码以学习“其他人的做法”。在这种情况下,遍历使用go“工作区”,尤其是与项目依赖关系有关的地方。 在处理各种Go项目时,使用一个或多个Go工作区(即$ GOPATH的定义)的常见(或存在)最佳实践是什么?我应该期望有一个类似于我所有项目的中央代码存储库的Go工作区,还是在我处理这些项目时都明确将其分解并设置$ GOPATH(有点像python) virtu
问题内容: 我正在构建一个基于expressjs的应用程序,我想在其中记录所有事件。我可以找到温斯顿,这似乎很酷。无论如何,我正在寻找一种方法将其连接到我的expressjs应用程序。 我还想要在应用程序内部登录。我的要求不是那么简单,所以我想将所有内容记录在我的应用程序中(不仅是请求)。 我目前的情况: server.js (我想在此级别记录http请求) 路线/something.js con
这里有些给使用和编写 Ansible playbook 的贴士. 你能在我们的 ansible-example repository.找到展示这些最佳实践的 playbook 样例.(注意: 这些示例用的也许不是最新版的中所有特性,但它们仍旧是极佳的参考.) Topics 最佳实践 接下来的章节将向你展示一种组织 playbook 内容方式. 你对 Ansible 的使用应该符合你的需求而不是我们
处理后台任务与常规调用方法有很大的不同。本指南旨在帮助让您的后台任务平稳有效地运行。本文基于 这篇博客文章。 使任务参数小而简单 方法(任务)在调用之前会被序列化。使用 TypeConverter 类将参数转换为 JSON 字符串。如果您有复杂的实体和 / 或大对象; 包括数组,最好将它们放入数据库,然后只将其标识 (id) 传递给后台任务。 错误例子: public void Method(En
VR设计 VR设计不同于平面体验设计。作为一种新的媒介,有新的最佳实践需要遵循,特别是保持用户的舒适性和存在性。这在如下指南中已经写得很透彻了: Oculus VR最佳实践 Leap Motion VR最佳实践指南 一些值得注意的事情: 公共的金科玉律是永远不要意外地把相机控制权从用户手中剥夺。 单位(比如对于位置)应该考虑使用米(m)。这是因为WebVR API以米为单位返回姿势数据,进而传送给