javascript - AngularJS 的多个部分 View

标签 javascript angularjs angular-directive angularjs-module

我有一个 AngularJS 应用程序,菜单上有一个内容列表。当用户单击菜单上的某个项目时,内容会加载到主视图上。有多种内容类型:

App wireframe

单击“1”时,将加载视频。单击“2”时,将加载 PDF 文档,依此类推。内容类型可能重复且复杂。

现在,我在单击某个项目时设置 $scope.content,并且根据其 contentType,我调用不同的指令:

<div class="content" ng-switch on="content.contentType">
    <div ng-switch-when="video">
        <videoplayer-directive video="content"></videoplayer-directive>
    </div>
    <div ng-switch-when="pdf">
        <pdfreader-directive pdf="content"></pdfreader-directive>
    </div>
    <div ng-switch-when="...">
        <...-directive content="content"></...-directive>
    </div>
</div>

现在我有两个问题:

  1. 加载页面时,所有指令模板都会自动加载。即使菜单中没有 PDF,也会加载 pdf 模板和脚本。
  2. 通过搜索,我了解到指令应该很小,而不是应用程序的整个模块。

如何重写上面的开关,以便遵守最佳实践并仅在需要时加载模板和脚本?

最佳答案

这正是 UI-Router 的用途:Angular UI Router

关于 scotch.io 的不错的教程

更简单的代码替换可能是简单地使用 ng-if。 NG-if 在调用之前不会实例化该指令。只需确保您的指令没有嵌入外部 div - 如果是这种情况,请关闭嵌入,或添加另一个 div 来包装它们。

<div class="content">
<div ng-if="content.contentType=='video'">
    <videoplayer-directive video="content"></videoplayer-directive>
</div>
<div ng-if="content.contentType=='pdf'">
    <pdfreader-directive pdf="content"></pdfreader-directive>
</div>
<div ng-if="content.contentType=='...'">
    <...-directive content="content"></...-directive>
</div>
</div>

关于javascript - AngularJS 的多个部分 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31966343/

相关文章:

javascript - 24 小时格式的日期范围选择器

javascript - 我们如何将纬度和经度转换为网站中的地址?

javascript - 热衷于强制 JS 代码对函数、类、它们的方法和粗箭头方法进行注释?

css - 单击 <li> 元素时, Angular 类的活跃度如何

javascript - 将 HTML 内容从 Angular Controller 发送到网页

javascript - 使用 Angular 指令在模板中绘制对象

javascript - 将 HTML 元素翻译成 Jquery 但看不到它们

javascript - 我的帖子请求在 $q.all 执行之前得到解决

javascript - $watch on 指令,其嵌套对象的隔离范围作为 crossfilter 的属性

angular - 'NgIf' 既不是 'ComponentType' 也不是 'DirectiveType'