如何使用 transclude 将 ngRepeat“模板”传递给 ngDirective?

2023-12-23

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

我有一个名为 myDirective 的 ng 指令,在指令模板中我有一个使用 ng-repeat 打印的 li 标签列表。我想将 li 标签的内容声明为 myDirective 声明的一部分,并使用 transinclude 打印所需的文本/html 内容。这样我就可以很好地分离关注点,这样我的指令就不需要知道源项的结构,并且调用者有责任布局 li 的内容。

像下面这样:

<my-directive source="vm.source">{{label}} and {{id}}</my-directive>

or even

<my-directive source="vm.source"><a href="#{{id}}">{{label}}</a></my-directive>

ngRepeat 的模板(在 myDirective 内)看起来像

template: '<ul><li ng-repeat="item in source" ng-transclude></li></ul>',

但我无法让嵌入在 hg-repeat 内工作。我正在使用最新版本的 Angular 1.2.19。准确地说,嵌入有效,但我在指令级别传递的表达式无效。

请帮助并感谢大家!

我想不出更好的问题标题。欢迎您让它变得更好。

更新:我选择了@pixelbits 的答案,因为这就是我所要求的。但我实际上使用了@Norguard 的方法,因为它是更有角度的方式。


嵌入的内容是针对父作用域的子作用域(也称为嵌入作用域,但这与指令的隔离作用域不同)进行编译的。话虽这么说,您可以在父 HTML 中指定模板(尽管它有点超出 Angular 的正常用例),并根据指令的隔离范围手动编译它。

HTML

  <body ng-app="myApp">
    <div ng-controller="myController as vm">
      <my-directive source="vm.source">
        <span>{{item.label}} and {{item.id}}</span>
      </my-directive>
    </div>
  </body>

请注意,my-directive 的内部 HTML 引用了必须在指令范围内定义的“item”。

指示

function directive($compile) {
    return {
        restrict: 'E',
        scope: {
            source: '='
        },
        compile: function(element, attr) {
          // in the compile phase, remove the contents 
          // of element so that it is not compiled by angular.
          // We will be manually compiling it in the link function.
           var template = angular.element('<ul><li ng-repeat="item in source">' + element.html() + '</li></ul>');
           element.empty();

           // link function
           return function(scope, element, attr) {
             // append the template
             element.append(template);

             // compile and link the template against the isolated scope.
             $compile(template)(scope);
           }              
        }          
    };
}

演示插件 http://plnkr.co/edit/QrnkOouAjbmNSg8BPOB5?p=preview

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

如何使用 transclude 将 ngRepeat“模板”传递给 ngDirective? 的相关文章

随机推荐

  • CKEditor 中不可删除的元素

    我想知道是否有办法使 CKEditor 4 中的元素 不可删除 我可能有一些像这样的 HTML div class content div class gallery div div 在这种情况下 gallery应该无法删除 content
  • 更新 iPhone 上表格单元格中的值

    如果我在 iPhone 应用程序中设置了一个包含多行的 tableView 我如何才能只更新其中一行 我知道它们在进入视图时会手动刷新 但为了争论计时器倒计时 我希望推出更新 Thanks 感谢您的回答 我找到了另一种方法 通过这样调用 N
  • NuGet 在构建开始之前恢复 PostSharp 包

    我正在使用 PostSharp 并且我的项目文件中有以下目标描述
  • 添加子视图动画

    我有主 UIView 在其中显示不同的数据 然后我放了一个按钮 它显示子视图 如下所示 IBAction buttonClicked id sender UIView newView UIView alloc initWithFrame C
  • 我如何确保我的秘密检索是安全的?

    目前 我正在使用 Terraform 和 Aws Secrets Manager 来存储和检索机密 我想了解我的实施是否安全 如果不安全 如何才能使其更安全 让我用我的尝试来说明 In secrets tf我创建一个像这样的秘密 这需要通过
  • 使用 OraclePreparedStatement 通过 Tomcat 8.5.9 从 java 8 写入 oracle 11.2 数据库?

    我在使用 Java 8 和 Tomcat 8 5 9 写入 Oracle 11 2 数据库时遇到问题 实际上 以下代码对于写入存储过程来说效果很好 但是在直接写入数据库时 出现错误 Context initCtx new InitialCo
  • 以编程方式安装 .mobileconfig

    我正在编写一个应用程序 以便自动执行将 Apple 移动设备连接到 WiFi 网络并将配置文件下载到设备的过程 由于它是自动化的 通过 Native Driver 等 因此所有功能都需要由应用程序本身控制 而不是发送到其他应用程序 例如 设
  • 如何将 pandas 数据分组推广到 3 个以上的维度?

    我正在使用优秀的pandas包来处理大量不同的气象诊断数据 当我将数据拼接在一起时 我很快就耗尽了维度 查看文档 可能是使用MultiIndex可能会解决我的问题 但我不确定如何将其应用到我的情况 文档显示了使用随机数据创建 MultiIn
  • 在 WinForms 应用程序中嵌入 Word 文档预览

    如何像资源管理器预览面板一样将 Word 文档嵌入到表单或用户控件中 I found 这个话题 http social msdn microsoft com Forums en csharpgeneral thread 127bd801 5
  • 如何在android studio 3.1.2中通过gradle安装geotools

    我想在我的项目中使用 geotools 所以我在我的存储库项目 gradle 中添加了 geotools lib allprojects repositories maven url http repo boundlessgeo com m
  • 在 Svelte 的 main.js 中导入本地 json

    将 JSON 导入 Svelte 的 main js 文件的模式是什么 我想 import App from App html const dataset require posts json console log dataset con
  • 面向 .NET Core 3.1 的 C++/CLI

    NET Core 3 1 添加了对 C CLI 的支持 宣布 NET Core 3 1 https devblogs microsoft com dotnet announcing net core 3 1 官方公告列出了两个新的项目模板
  • .NET Windows 服务 - 架构决策

    我目前有一个全天持续运行的 Windows 服务 它有多个启动线程 每天更新缓存的任务 每周任务进行清理 将 XML 导入 SQL Server 的 24 7 任务 每天运行大约 12 小时的任务 启动控制台应用程序来管理 ETL 这些任务
  • 在 Java8 中设置 LocalDateTime 和时区的格式

    我有这个简单的代码 DateTimeFormatter FORMATTER DateTimeFormatter ofPattern yyyyMMdd HH mm ss SSSSSS Z LocalDateTime now format FO
  • 视图中的 HttpContext.User 或 Page.User?

    如果我在 Asp net MVC 的视图中编码并且我想获取当前用户 那么使用是否更好 Page User or HttpContext User 有区别吗 Page User回报this Context User这与HttpContext
  • ChromeDriver 控制台应用程序隐藏

    我创建了一个播放器 它将使用 C 中的 selenium 和 ChromeDriver 来自动化 chrome 运行良好 我面临的问题是 当它为 ChromDriver 创建对象时 它将启动 ChromeDriver 应用程序 该应用程序会
  • 反应事件未触发

    在与 img 标签并熟悉 React 我发现我的onLoad and onError事件没有触发 在将我的使用简化为最基本的 React 组件之后 我仍然发现事件没有触发 在下面的组件中 我希望单击渲染的 div 登录到控制台 它渲染得很好
  • Woocommerce - 产品页面中的描述

    我需要在 Woocommerce 插件中添加我的 产品 描述的一些摘录 我有这样的页面 http exploreprague cz guides buddies 2 http exploreprague cz guides buddies
  • 用户使用 Azure AD 身份验证登录后调用适用于 Teams 的图形 API

    在用户使用 Azure AD 登录应用程序后 我们尝试使用 Microsoft Graph API for Teams 用户应该能够向应用程序内的 Teams 频道发送消息 我试图得到访问令牌登录用户并将其作为不记名令牌传递给图形 API
  • 如何使用 transclude 将 ngRepeat“模板”传递给 ngDirective?

    Demo http plnkr co edit TiH96FCgOGnXV0suFyJA p preview http plnkr co edit TiH96FCgOGnXV0suFyJA p preview 我有一个名为 myDirect