编译动态内容 - AngularJS

2024-04-23

我正在重写这个问题,因为我认为原来的问题不太清楚。

基本上,我有一个“包装器”指令,我试图将属性动态添加到包装(嵌入)元素之一。我可以让它工作,但 Angular 似乎不知道添加后的新属性。

如果我使用$compile那么 Angular 确实会识别它们 - 但代价是双重编译嵌入的内容,在这种情况下,它的数量会加倍options in the select tag.

这是一个笨蛋 http://plnkr.co/edit/Qa0vx0swMDVujtN7toXX?p=preview显示(带有注释)我正在尝试的内容,下面是相同的代码,供那些可以查看代码并通过查看提出答案的人使用: (注意 - 我的最终目标是检查自定义指令valid-form-group为了required属性,如果发现将其应用于包含的select tag)

HTML

<body ng-controller="MainCtrl">

  <form name="validationForm" novalidate>

    <valid-form-group class="form-group" ng-class="{'has-error': validationForm.validInfo.$error.required}" required>

      <select ng-model="data.option" ng-options="option.id as option.message for option in selectOptions" name="validInfo" id="validInfo">
        <option value="">-- Select a Question --</option>
      </select>

    </valid-form-group>

  </form>

</body>

JS

var app = angular.module('plunker', [])
  .controller('MainCtrl', function($scope) {
    $scope.selectOptions = [
      {id: 1, message: 'First option'}, 
      {id: 2, message: 'Second option'}, 
      {id: 3, message: 'Third option'}
    ];
  })
  .directive('validFormGroup', function($compile) {
    return {
      restrict: 'E',
      template: '<div><span ng-transclude></span></div>',
      replace: true,
      transclude: true,
      require: '^form',
      link: function(scope, element, attrs, ctrl) {

        if (attrs.required !== undefined) {

          var selectElement = angular.element(element.find('select'));
          // either of the below produce the same results
          selectElement.attr('ng-required', true);
          //selectElement.attr('required', true);

          // if the below is commented out it wont validate
          // BUT if it is left in it will recompile and add another 3 options
          $compile(selectElement)(scope); 
        }
      }
    };
  });

CSS

.has-error{
  border: solid 1px red;
}

请注意,此处的示例使用 'required' (or ng-required) 作为添加的属性,以强调 Angular 除非编译,否则无法识别它。

欢迎任何帮助或评论 - 有点失望我无法让它发挥作用,所以也许我缺少一些基本的东西......

The plunker http://plnkr.co/edit/Qa0vx0swMDVujtN7toXX?p=preview应该有助于形象化我的问题。

edit- 对于延迟回复答案和评论表示歉意。正如下面一两条评论中提到的,个人问题使我无法抽出时间进行调查。


尝试这个简单的指令:

.directive('validFormGroup', function($compile) {
    return {
        restrict: 'A',
        replace: false,
        require: '^form',
        compile: function (element, attr) {
            if (attr.required !== undefined) {
                var selectElement = element.find('select');
                // either of the below produce the same results
                selectElement.attr('ng-required', true);
                //selectElement.attr('required', true);
            }
        }
    };
});

并将其用作 html 属性:

<div valid-form-group class="form-group" ng-class="{'has-error': validationForm.validInfo.$error.required}" required>

      <select ng-model="data.option" 
      ng-options="option.id as option.message for option in selectOptions"
      name="validInfo" id="validInfo" >
<option value="">-- Select a Question --</option>
</select>
      <br/>
      <br/>Required invalid? {{validationForm.validInfo.$error.required||false}}
      <br/>
      <br/>

</div>

DEMO http://plnkr.co/edit/nH8L91Py6v01UoILUfh8?p=preview

解释:

  • 我不使用transclude在这个解决方案中根本没有,因为该指令的目的只是为了修改html在使用范围进行编译之前,不需要嵌入过于复杂的内容。

  • 在这里我处理compile函数而不是link功能。compilefunction 是你修改 html 的好地方在链接到范围之前.

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

编译动态内容 - AngularJS 的相关文章

随机推荐

  • 将 php4/mysql4 迁移到 php5/mysql5:预期的 php 问题?

    我有一个遗留的Web应用程序php4 mysql4 MyISAM 数据库包含一些cms 一些用户数据 一些日历应用程序 现在我要迁移到带有 php5 mysql5 的新服务器 在这种迁移场景中 典型的 php 问题是什么 php sql 查
  • 是否可以在两个 Android 设备之间直接将数据传输给同一网络中的其他用户?

    假设我有两个 Android 移动设备 连接到同一个无线网络 并且该网络没有外部 互联网访问权限 在没有第三方软件的情况下 是否可以在不知道对方ip 不创建热点的情况下通过wifi传输数据 就像我们在 Windows 上所做的那样 如果 2
  • 生产准备 Ionic 应用程序的任务

    我想弄清楚是什么best从代码传递到最终可部署 apk ipa 的过程 到目前为止 我有一个使用 Karma Jasmine 的测试套件 它将 TypeScript 转换为 JS 并运行一些单元测试 我通过 gulp 开始这个过程 之后我所
  • PhantomJs - 如何渲染多页 PDF

    我可以使用 phantomJS 创建一页 PDF 但我在文档中找不到如何创建不同的页面 每个页面都来自 html 视图 并将它们放入一个 PDF 中 我正在为 NodeJS 使用 node phantom 模块 只需要指定一个paperSi
  • 多线程应用程序断点

    如果我对多线程应用程序设置断点 会发生什么情况 它是否停止所有线程 仅停止断点的线程 还是整个程序崩溃 如果可能的话 我是否只想停止一个线程 或者这会弄乱我的应用程序 如果我无法对多线程应用程序进行断点 我可以使用哪些调试技术 JAVA 就
  • 动态创建临时表,插入临时表,然后select

    基本上我希望能够根据现有表动态创建临时表 然后将值插入到临时表中 然后选择插入的值 我已经得到了可以创建临时表的部分 工作得很好 只是插入和选择表单的效果不太好 这是我当前的代码 declare table table OrdinalPos
  • iOS Javascript Workers终止()后CPU占用率过高

    我有一个复杂的 JavaScript 函数 可能需要 1 秒或很多分钟才能发送答案 所以我创建了一个正在工作的 Worker 我从 Swift 中的 UIWebView 调用这个函数 stringByEvaluatingJavaScript
  • 如何将项目添加到布局中的特定索引

    我按照这个示例创建一个流布局 http doc qt io qt 4 8 qt layouts flowlayout example html http doc qt io qt 4 8 qt layouts flowlayout exam
  • 如何在滚动时实现图像淡入效果(如 mashable.com)

    我想知道 mashable com 上图像的淡入效果 请参阅http mashable com 2009 08 14 google android logo remixes http mashable com 2009 08 14 goog
  • Ember:断言失败:EmberObject.create 不再支持定义计算属性

    我使用的是 Ember 2 16 版本 我们升级到了 3 8 版本升级后 我看到此错误 但无法弄清楚错误来自何处 在什么情况下我会收到此错误 我看到其中一篇帖子 Ember JS 中的动态计算属性已弃用 https stackoverflo
  • 使用 php 和 mysql 将多个复选框值存储到数据库

    我想将多个复选框值存储在单个字段中 我使用该链接http www mindfiresolutions com Storing array data to MySQL using PHP 1296 php http www mindfires
  • 如何在不存储 TypeScript 的情况下进行内联类型检查?

    我有一些界面 ITestInterface foo string 我想将此接口的实例作为参数传递给函数 该函数将采用任何对象类型 因此它本身不会进行类型检查 为了确保对象的类型正确 我可以使用存储 const passMe ITestInt
  • 布尔变量不是默认总是 false 吗?

    我声明了一个布尔变量bool abc 在一个类中 并认为默认情况下它是错误的 一个if我的程序中的条件 if abc 结果是true 所以我输出abc的值 看到它包含值55 这正常吗 我们是否总是必须分配 bool abc false 以确
  • Action Filter 中的 UnitOfWork 似乎正在缓存

    我有一个使用 IoC Unity 的 MVC 3 站点 我的模型是使用 EF4 和 POCO 生成的 我正在使用操作过滤器来提交我的工作单元 public class UseUnitOfWorkAttribute ActionFilterA
  • App.config - 加密部分错误:

    我有一个对配置文件中的部分进行加密的应用程序 当我第一次尝试从配置文件中读取加密部分时 我收到一条错误消息 无法识别的属性 configProtectionProvider 请注意 属性名称区分大小写 config Configuratio
  • 如何删除选中时覆盖 UITabBarItem 的蓝色方块?

    我有一个 iPad 应用程序 Xcode 5 iOS 7 ARC 和 Storyboards 我有一个UITabBarController 并且每个场景都有一个UITabBarItem 当我点击选项卡栏项目时 它会转到正确的场景 但 当前
  • 如何列出拥有活跃订阅者的所有 pubnub 频道?

    我想列出与具有活跃订阅者的订阅密钥关联的所有频道 有没有办法用 pubnub 做到这一点 如果这有什么区别的话 我正在使用 JavaScript API PubNub 现在 API 返回与订阅键关联的频道列表 其中存在订阅者 PUBNUB
  • ASP.NET 5 MVC6 User.GetUserId() 返回错误的 ID

    我在 ASP NET 5 中有一个简单的项目 只有一个注册用户 我尝试通过扩展方法获取当前登录用户的IDGetUserId from using System Security Claims命名空间 不幸的是 这个方法返回给我不存在的ID
  • 数据表选择前5行

    您好 有什么方法可以从数据表中选择前 5 行而不进行迭代吗 我认为 你可以使用 LINQ datatable AsEnumerable Take 5
  • 编译动态内容 - AngularJS

    我正在重写这个问题 因为我认为原来的问题不太清楚 基本上 我有一个 包装器 指令 我试图将属性动态添加到包装 嵌入 元素之一 我可以让它工作 但 Angular 似乎不知道添加后的新属性 如果我使用 compile那么 Angular 确实