您的指令以及架构问题都存在一些技术问题。让我们从简单的部分开始:
- 您正在使用
Tabs={...}
,但您的指令被称为TabsDirective
. 另外,指令必须有驼峰命名。所以你的指令应该重命名为tabs
or tabsDirective
(尽管在指令的名称中使用“指令”似乎有点多余)。
- 您在 div 中使用
<p>
标签resp-tabs-container
,但根据 Easy Responsive Tabs 文档,您应该使用<div>
标签。
现在到了大问题。当你的指令被执行时,div
它所应用的内容还没有被 Angular 处理,所以当link
函数运行并调用$(element).easyResponsiveTabs(...)
时,元素标记没有完全呈现,插件根本不起作用。而且由于该指令应用于包装内容的 div,因此它总是在呈现该内容之前执行。
您可以使用一个技巧来使其工作:easyResponsiveTabs
稍微延迟调用,以便 Angular 完全呈现 div 内容。您可以使用该$timeout
服务来做到这一点。但是,它并不完美:如果延迟不够长,它可能不起作用,并且您可能会在 EasyReponsiveTags 插件转换之前看到原始标记(延迟越长,原始标记可见的时间越长)。你的 Plunker 的这个分叉说明了这一点。
我认为处理这个问题的正确方法是创建一个指令来控制选项卡的呈现方式和时间。如果您愿意这样做,Angular 主页中“创建组件”部分中的示例应该可以帮助您入门。