当前位置: 首页 > 面试题库 >

如何对自定义AngularJS指令使用“替换”功能?

易成双
2023-03-14
问题内容

为什么replace=true还是replace=false没有在下面的代码产生任何影响?

当replace = false时为什么不显示“某些现有内容”?

或者更谦虚地讲,您能否解释replace=true/false指令中的功能以及如何使用它?

JS /角度:

<script>
    angular.module('scopes', [])
          .controller('Ctrl', function($scope) {
                $scope.title = "hello";

          })
          .directive('myDir', function() {
            return {
              restrict: 'E',
              replace: true,
              template: '<div>{{title}}</div>'
            };
      });
</script>

HTML:

<div ng-controller="Ctrl">
    <my-dir><h3>some existing content</h3></my-dir>
</div>

在此处查看Plunker:

http://plnkr.co/edit/4ywZGwfsKHLAoGL38vvW?p=preview


问题答案:

拥有后,replace: true您将获得以下DOM:

<div ng-controller="Ctrl" class="ng-scope">
    <div class="ng-binding">hello</div>
</div>

而随着replace: false你得到这个:

<div ng-controller="Ctrl" class="ng-scope">
    <my-dir>
        <div class="ng-binding">hello</div>
    </my-dir>
</div>

因此replace,伪指令中的属性是指应用伪指令的元素(<my-dir>在这种情况下)是否应保留(replace: false),并且伪指令的模板应 附加 为其子元素,

要么

应用指令的元素应由指令的模板 替换replace: true)。

在这两种情况下,元素的子元素(将对其应用指令)都将丢失。如果您想保留元素的原始内容/子元素,则必须对其进行转义。可以使用以下指令:

.directive('myDir', function() {
    return {
        restrict: 'E',
        replace: false,
        transclude: true,
        template: '<div>{{title}}<div ng-transclude></div></div>'
    };
});

在这种情况下,如果在指令的模板中有一个具有attribute的元素(或多个元素)ng-transclude,则其 内容
将被该元素(对其应用指令)的原始内容替换。

请参见翻译示例http://plnkr.co/edit/2DJQydBjgwj9vExLn3Ik?p=preview



 类似资料:
  • 问题内容: 在本文档中:http : //docs.angularjs.org/guide/directive,其中说到指令有一个配置: template- 用HTML的内容替换当前元素。替换过程将所有属性/类从旧元素迁移到新元素。有关更多信息,请参见下面的“创建组件”部分。 JavaScript代码 HTML代码 但是最后一页看起来像: 似乎不起作用。我想念什么吗? 现场演示:http://pl

  • 本文向大家介绍AngularJS使用自定义指令替代ng-repeat的方法,包括了AngularJS使用自定义指令替代ng-repeat的方法的使用技巧和注意事项,需要的朋友参考一下 前言 大家都知道对于处理小数量,ng-repeat是非常有用的,但是如果需要处理非常大的数量集,还是采用自定义的方法更好一些。特别是数据大多都是静态的或已预存储好的,这个时候应避免使用ng-repeat指令。 ng-

  • 问题内容: 我将如何在angularjs中创建一个指令,例如采用以下元素: 并将其转换为此 我已经编写了用于自动链接函数中的文本并返回html的功能(让我们将函数称为“ autoLink”),但是我对指令不满意。 我还想向元素添加属性,以将对象传递给指令。例如 其中link.props是{a:’bla bla’,b:’waa waa’}之类的对象,该对象将作为第二个参数传递给autoLink函数(

  • 问题内容: 如果我有一个没有模板的AngularJS指令,并且希望它在当前作用域上设置一个属性,那么最好的方法是什么? 例如,计算按钮点击次数的指令: 使用伪指令将点击计数分配给双向属性中的表达式: 有一个更好的方法吗?从我所读的内容来看,孤立的作用域会过大,但是我需要一个子作用域吗?除了使用以外,还有没有更干净的方法可以写回指令属性中定义的范围变量。我只是觉得我很难过。 这里有完整的柱塞。 问题

  • 问题内容: 我是AngularJS的新手,目前正在处理一个输入字段,该字段可以一次接受多个标签以及自动完成功能,该功能将可用标签显示为下拉选项。为此,我使用在Web上找到的指令(http://mbenford.github.io/ngTagsInput/),该指令为我提供了一个自定义HTML元素。这很漂亮: : : 但是,我想使用标准HTML 元素而不是指令附带的自定义元素,因此,在很多帮助和使用

  • 问题内容: 此自定义验证指令是官方角度网站上提供的示例。 http://docs.angularjs.org/guide/forms会 检查文本输入是否为数字格式。 为了对该代码进行单元测试,我编写了以下代码: 然后我得到这个错误: 我到处都放置了print语句以查看发生了什么,而且该指令似乎从未被调用过。测试像这样的简单指令的正确方法是什么? 问题答案: 另一个答案的测试应写为: 请注意,now