我创建了一个侧边栏自定义指令。它工作正常,因为它加载到它应该加载的位置。无法正常工作的是标签。他们假定的行为是下拉菜单,单击时会显示其内部元素。当直接粘贴代码时它可以正常工作,但当使用其他 html 文件中的代码调用指令时则不能正常工作。我截取了 2 个屏幕截图来显示在包含指令的 html 代码的文件中使用 class="page-sidebar"与在“根”文件上使用它之间的区别:
很明显,突出显示的行中的几个属性未应用于第一个行。
请帮忙,因为我需要将其作为跨多个页面使用的“部分” View 。
编辑:指令代码:
app.directive('sidebar', function () {
return {
restrict: 'E',
templateUrl: "/app/views/sidebar.html"
};
});
编辑2:
在帖子中添加这个,因为它可能与我的解释方式混淆:
我知道混淆可能在哪里,但它们是不同的东西。 < sidebar > 是我创建的指令。 class="page-sidebar"来 self 正在使用的模板,它是将所有内容格式化到其位置的原因。我尝试将 class="page-sidebar"插入到指令中以查看它是否有效,但它们是不同的东西。
编辑3:
为了消除混淆,我希望:两张图片都显示侧边栏正在工作。我知道它是一个元素,因此我正在使用 < sidebar >,它正在工作,这不是问题所在。问题是当我使用它时,下拉菜单等内容(如第二张图片所示)在我单击它们时不起作用,而当元素内容只是粘贴到 index.html 而不是 sidebar.html 中时, 它有效。
编辑4:
找到了问题,但仍然没有解决方案。我改变了一些东西,而不是侧边栏,它现在位于小部件上。侧边栏现在始终加载,它是根据 URL 加载的页面内容。这帮助我找到了问题所在:
$(".owl-carousel").owlCarousel({mouseDrag: false, touchDrag: true, slideSpeed: 300, paginationSpeed: 400, singleItem: true, navigation: false,autoPlay: true});
前面的代码位于 html 中包含的 plugins.js 文件中。由于某种原因,加载页面时未运行此行。当我在 chrome 控制台中运行这一行时,出现了正确的小部件。
由于某些原因,页面加载时 js 内容未运行。
最佳答案
您的主要问题是 restrict: 'E',
,这将其限制为元素。这解释了为什么它适用于 <sidebar>
, 但不适用于 <div class="sidebar">
.如果要使用类,需要改成restrict: 'C'
.
另一个问题是,当您尝试将指令用作类时,您使用的是 class="page-sidebar"
而不是 class="sidebar"
.
参见 docs用于指令。
关于javascript - AngularJS 自定义指令丢失根属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35923285/