动态选项卡中的动态内容(Angular、UI Bootstrap)

2023-12-23

我想在使用 AngularJs 和 UI Bootstrap 动态生成的选项卡的内容中使用 ng-include 。

我这里有一个 Plunker:http://plnkr.co/edit/2mpbovsu2eDrUdu8t7SM?p=preview http://plnkr.co/edit/2mpbovsu2eDrUdu8t7SM?p=preview

<div id="mainCntr" style="padding: 20px;">
  <uib-tabset>
    <uib-tab ng-repeat="tab in tabs" active="tab.active" disable="tab.disabled">
      <uib-tab-heading>
        {{tab.title}} <i class="glyphicon glyphicon-remove-sign" ng-click="removeTab($index)"></i>
      </uib-tab-heading>
      {{tab.content}}
    </uib-tab>
  </uib-tabset>
</div>

JS Code:

$scope.addTab = function() {
    var len = $scope.tabs.length + 1;
    var numLbl = '' + ((len > 9) ? '' : '0') + String(len);

    var mrkUp = '<div>' +
        '<h1>New Tab ' + numLbl + ' {{foo}}</h1>' + 
        '<div ng-include="tab.tabUrl" class="ng-scope"></div>' +
        '</div>';

    $scope.tabs.push({title: 'Tab ' + numLbl, content: $compile(angular.element(mrkUp))($scope)});
}

在 Plunker 中,单击“添加选项卡”按钮。它调用 $scope 中的一个函数,该函数将新选项卡推送到集合中,但传入一些包含 ng-include 指令的动态生成的内容。预期的输出是 ng-include 将显示在选项卡内容区域内。

Thanks


在你的 Plunker 中你正在使用ng-bind-html它不会为您编译 HTML。您可以创建一个新指令来为您执行此操作。

源代码为ng-bind-html:

var ngBindHtmlDirective = ['$sce', '$parse', '$compile', function($sce, $parse, $compile) {
  return {
    restrict: 'A',
    compile: function ngBindHtmlCompile(tElement, tAttrs) {
      var ngBindHtmlGetter = $parse(tAttrs.ngBindHtml);
      var ngBindHtmlWatch = $parse(tAttrs.ngBindHtml, function getStringValue(value) {
        return (value || '').toString();
      });
      $compile.$$addBindingClass(tElement);

      return function ngBindHtmlLink(scope, element, attr) {
        $compile.$$addBindingInfo(element, attr.ngBindHtml);

        scope.$watch(ngBindHtmlWatch, function ngBindHtmlWatchAction() {
          // we re-evaluate the expr because we want a TrustedValueHolderType
          // for $sce, not a string
          element.html($sce.getTrustedHtml(ngBindHtmlGetter(scope)) || '');
        });
      };
    }
  };
}];

为新指令选择一个名称,例如compile-html.

Replace tAttrs.ngBindHtml with tAttrs.compileHtml(或您选择的任何名称)。

你需要更换$sce.getTrustedHtml with $sce.trustAsHtml,否则你会得到Error: [$sce:unsafe] Attempting to use an unsafe value in a safe context.

然后你需要打电话$compile:

$compile(element.contents())(scope);

完整指令:

app.directive('compileHtml', ['$sce', '$parse', '$compile',
  function($sce, $parse, $compile) {
    return {
      restrict: 'A',
      compile: function ngBindHtmlCompile(tElement, tAttrs) {
        var ngBindHtmlGetter = $parse(tAttrs.compileHtml);
        var ngBindHtmlWatch = $parse(tAttrs.compileHtml, function getStringValue(value) {
          return (value || '').toString();
        });
        $compile.$$addBindingClass(tElement);

        return function ngBindHtmlLink(scope, element, attr) {
          $compile.$$addBindingInfo(element, attr.compileHtml);

          scope.$watch(ngBindHtmlWatch, function ngBindHtmlWatchAction() {

            element.html($sce.trustAsHtml(ngBindHtmlGetter(scope)) || '');
            $compile(element.contents())(scope);
          });
        };
      }
    };
  }
]);

Usage:

<div compile-html="tab.content"></div>

Demo: http://plnkr.co/edit/TRYAaxeEPMTAay6rqEXp?p=preview http://plnkr.co/edit/TRYAaxeEPMTAay6rqEXp?p=preview

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

动态选项卡中的动态内容(Angular、UI Bootstrap) 的相关文章

随机推荐

  • 如何将 hset 与 django-redis-cache 一起使用?

    我是 django redis 的新手 我开始熟悉 heroku redis 插件 但是 我只能使用set and get 当我尝试使用其他方法时 例如hset 我收到此错误 RedisCache object has no attribu
  • Android Studio 很慢

    我有一个项目 里面有大约 20 个模块 Gradle clean 大约需要 5 分钟 同样 如果我添加一个新模块 gradle 更新项目需要超过 5 分钟 不依赖于外部库 依赖关系仅存在于项目内部的几个模块之间 我有相同的项目 没有 gra
  • 如何获取工作流活动 (SharePoint) 中的上下文项

    我正在为 sharepoint 工作流编写自定义活动 但我不知道如何使用当前工作流项目 SPWeb 或 SPSite I see http blogs microsoft co il blogs davidbi archive 2008 0
  • htaccess如何将子目录重定向到外部URL

    I tried 301 Redirect Old File Redirect 301 www mydomain com subdirectory http newurl com 但这让我进入了 newurl com subdirectory
  • Android 2.3 中出现“无对等证书”错误,但 4 中则没有

    得到 javax net ssl SSLPeerUnverifiedException No peer certificate error 在运行 Android 2 3 的模拟器中 但在 4 中则不然 在 4 中 它运行得很好 我正在尝试
  • varchar 的 DbString、IsFixedLength 和 IsAnsi

    我是 Dapper 的新手 想知道为什么当我的代码在没有它的情况下运行时会出现以下建议 Ansi 字符串和 varchar https github com StackExchange Dapper ansi strings and var
  • MBCS 编码未知

    我正在尝试在 Python 中打开带有 MBCS 编码的文件 但出现错误 如果我写 fileIN open filename r encoding mbcs I get Traceback most recent call last Fil
  • 安装.NET Core Runtime和SDK后需要重启吗?

    我们即将在生产环境中部署 netcore 2 0 应用程序 但我们需要首先安装 NET Core 运行时和 SDK 安装是否需要重启才能生效 既然是生产 我们不希望这种情况发生 我们安装了以下内容here https www microso
  • RAII 和系统资源清理

    RAII 是资源清理的一个很好的解决方案 然而 RAII 基于堆栈展开 如果进程异常终止 堆栈将不会被展开 这意味着 RAII 在这种情况下不起作用 对于进程生命周期的资源来说 这没什么好担心的 但是对于文件系统生命周期或者内核生命周期的资
  • 原则上,Android 设备是否可以通过蓝牙/GameKit 与 iPhone 连接?

    我对纯理论不感兴趣 但作为近期或中期的实际可能性 比如 12 24 个月内 作为一名熟悉 但不专门研究 两个主要智能手机平台的开发人员 我是否应该期望 Android 库的出现 它可以将自己欺骗到 iPhone 应用程序基于 GameKit
  • Spring mockMvc 在我的测试中不考虑验证

    我正在尝试使用mockMvc 设置集成测试 但遇到了问题 事实上 spring没有集成任何验证注解 为了更精确 我放置了可以测试的 Controller 类的代码 Controller public class UserRegisterCo
  • 带有外部更新的 NHibernate 二级缓存

    我有一个 99 只读的 Web 应用程序 有一个单独的服务以特定的时间间隔 例如每 10 分钟 更新数据库 该服务如何告诉应用程序使其二级缓存失效 它真的重要吗 我实际上并不关心我是否有太多过时的数据 如果我不使缓存失效 记录需要多长时间才
  • FBSDK 的 LLDB 问题,每当我放置断点时,我都会收到错误,并且无法打印任何变量

    每当我设置断点并尝试访问任何变量时 我都会收到此错误 如果我尝试在控制台中打印变量 则会收到以下错误 lldb p someVar error Error in auto import failed to get module Jogabo
  • 维护多个设置文件

    目前 我有一个包含各种单选按钮 目录浏览器 日期选择器等的表单 应用程序使用这些设置 并执行文件删除任务 我想知道将这些设置保存到可以稍后加载的外部文件的最佳策略是什么 因此基本上每个配置都可以被加载 执行 然后加载另一个配置 此外 配置可
  • Angular 2 Http 重试时间

    我正在尝试使用retryWhen在 HTTP 调用中 当尝试像这样使用时它工作得很好 return this http get environment apiUrl track this user instance id this curr
  • org.hibernate.event.def.EventCache 不支持 null 实体是什么意思?

    我在尝试保存实体时收到错误 我仅在启动服务器时收到此错误 而不是在使用 dbunit 运行单元测试时收到此错误 我正在努力拯救一个协会 我的单元测试应该与我在手动测试时遇到的情况完全相同 我正在关系的一端添加一个新实体 其中之前不存在任何关
  • 在 PowerPoint 中通过占位符名称处理形状

    我正在尝试创建一个函数 该函数将返回特定的形状 基于known分配给的名称属性CustomLayout Shapes Placeholder目的 我无法使用该形状 Name因为即使从模板 布局创建幻灯片时 这也是事先未知的 挑战似乎是自定义
  • 如何取消nuke pyside中的字体阴影

    I have a UI which automatically sets font shadow in nuke and how to cancel it I want the font on this button to look lik
  • git-svn:重置 master 的跟踪

    我在用着git svn使用 SVN 存储库 我的工作副本是使用创建的git svn clone s http foo bar myproject这样我的工作副本就遵循 SVN 的默认目录方案 主干 标签 分支 最近我一直在研究一个使用创建的
  • 动态选项卡中的动态内容(Angular、UI Bootstrap)

    我想在使用 AngularJs 和 UI Bootstrap 动态生成的选项卡的内容中使用 ng include 我这里有一个 Plunker http plnkr co edit 2mpbovsu2eDrUdu8t7SM p previe