使用 ng-include 作为父节点时,使用 jquery 禁用所有子元素的 Angular 指令不起作用

Posted

技术标签:

【中文标题】使用 ng-include 作为父节点时,使用 jquery 禁用所有子元素的 Angular 指令不起作用【英文标题】:Angular directive using jquery to disable all child elements does not work when using ng-include for parent node 【发布时间】:2016-08-19 22:02:30 【问题描述】:

我有一个指令,它使用 jquery 来禁用 div 中的所有子元素。因为它是一个包含很多控件的大页面,所以我使用 ng-include 来指向其他 html 标记。我遇到的问题是,在我的指令中的 jquery 应用之后,我的 div 的内容以某种方式加载。我不能将 fieldset 与 ng-disabled 一起使用,因为这个应用程序是专门为 IE 设计的,而 IE 不支持 fieldset 上的 ng-disabled(是的……我知道……可悲,但这是公司政策)。

角度指令:

app.directive('jqDisable', function() 
  var linkFunction = function(scope, element, attributes) 
      $(element).find('*').attr("disabled", true);
  ;

  return 
    link: linkFunction
  

);

html 标记:

  <div ng-include src="'schedulerOneTimeOccurence.html'" jq-disable="true">

  </div>

插件链接:http://plnkr.co/edit/jc9eCA?p=preview

谢谢

【问题讨论】:

【参考方案1】:

你可以简单地移动你的指令: jq-禁用=“真” 到“schedulerOneTimeOccurence.html”。

  <div class="form-horizontal" ng-controller="ctrl" jq-disable="true" >
    <input type="text" datepicker-popup="MM/dd/yyyy" ng-model="dt" is-open="opened" min="minDate" max="'2015-06-22'" datepicker-options="dateOptions" date-disabled="" ng-required="true" />
    <button class="btn" ng-click="open()"><i class="icon-calendar"></i></button>
    <button ng-click="btnclick()">click</button>
  </div>

插件链接:http://plnkr.co/edit/QaCWcdnNyvnyMS2LLsbJ?p=preview

【讨论】:

jqDisable 中创建一个console.log($(element).find('*'));。在应用指令之前,您基本上需要等待包含模板(异步任务)。解决这个问题的简单方法是,就像这个答案所说,在包含的模板中使用jq-disable【参考方案2】:

我认为没有理由使用 ng-incluce,为什么不使用 templateUrl

<div jq-disable="true"></div>

在你的指令中:

app.directive('jqDisable', function() 
  var linkFunction = function(scope, element, attributes) 
      $(element).find('*').attr("disabled", true);
  ;

  return 
    link: linkFunction,
    templateUrl: 'schedulerOneTimeOccurence.html'
  

);

【讨论】:

这将使指令仅适用于这个特定的容器,不推荐这样做 为什么不推荐?这就是指令的漏洞概念 该指令用于禁用容器中的元素。你想让它可重复使用。它应该对任何容器都有用。所以.. 对于那种指令,添加 templateUrl 是非常糟糕的做法

以上是关于使用 ng-include 作为父节点时,使用 jquery 禁用所有子元素的 Angular 指令不起作用的主要内容,如果未能解决你的问题,请参考以下文章

使用 nginclude 时避免使用额外的 DOM 节点

如何使用 webpack ng-include 一个 svg

angularjs1- ng-include

ng-model 未更新 ng-include [关闭]

Webpack:对 ng-include 使用 require

如何让 ng-include 指令与内容交付网络一起使用?