我开始更好地学习 AngularJS,并且我注意到 AngularJS 试图强调将 View 与 Controller 和封装分离。一个例子是人们告诉我 DOM 操作应该放在指令中。我现在有点掌握了它,以及如何使用注入(inject)当前元素的链接函数来实现出色的行为功能,但这并不能解释我经常遇到的问题。
示例: 我有一个侧边栏,我想通过单击按钮打开。如果不使用硬编码的 javascript/jquery 选择器来抓取侧边栏,就无法在按钮的指令链接函数中执行此操作,这是我在 angularJS(硬编码 dom 选择器)中看到的非常令人皱眉的事情,因为它破坏了关注点分离。我想解决这个问题的一种方法是让我希望操作的每个元素都具有属性指令,并在其链接函数上,将其元素属性的引用保存到 dom 工厂中,以便每当指令需要访问除自身以外的元素时,它可以调用返回元素的 dom-factory,即使它不知道元素来自哪里。但这是“Angular 方式”吗?
我这么说是因为在我当前的项目中,我使用的是硬编码选择器,这已经很难维护了,因为我不断地改变我的 CSS。必须有更好的方法来访问多个 DOM 元素。有什么想法吗?
最佳答案
有多种方法可以解决这个问题。
一种方法是创建一个 sidebar
指令,该指令响应“明确定义”的广播消息以打开/关闭侧边栏。
.directive("sidebar", function(){
return {
templateUrl: "sidebar.template.html",
link: function(scope, element){
scope.$root.$on("openSidebar", function(){
// whatever you do to actually show the sidebar DOM content
// e.x. element.show();
});
}
}
});
然后,按钮可以调用某个 Controller 中的函数来打开侧边栏:
$scope.openSidebar = function(){
$scope.$root.$emit("openSidebar");
}
另一种方法是使用 $sidebar
服务 - 这有点类似于 $modal
在 angularui-bootstrap 中的工作方式,但可以更加简化。
关于html - 如何访问超过2个DOM元素 "The AngularJS way"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29851956/