Angular中的多个自定义指令范围

panzhuli

我有一个自定义指令,希望在页面上的多个元素上使用。我很难隔离范围并显示基于子范围的元素。这是我要执行的操作的一个示例:

app.js:

var app = angular.module('plunker', []);
app.controller('MainCtrl', function($scope) {
  $scope.name = 'World';
})
.directive('comShowLabelOnFocus', function() {
  return {
    restrict: 'A',
    scope: {
      showlabel: '='
    },
    link: function(scope) {
      scope.inputClicked = function() {
        event.currentTarget.placeholder = '';
        scope.showlabel = true;
      };
    }
  }
});

index.html:

<body ng-controller="MainCtrl">
    <p>Hello {{name}}!</p>


    <div class="form-group medium-6 columns" com-show-label-on-focus>
      <input  
        type="email"
        name="email"
        ng-model="model.email"
        placeholder="Your Email Address"
        ng-click="inputClicked()"/>
      <label ng-show="showlabel">Email Address (Required)</label>
      showlabel is: {{showlabel}}
    </div>

    <div class="form-group medium-6 columns" com-show-label-on-focus>
      <input  
        type="text"
        name="name"
        ng-model="model.name"
        placeholder="Your Name"
        ng-click="inputClicked()"/>
      <label ng-show="showlabel">Name (Required)</label>
      showlabel is: {{showlabel}}
    </div>
  </body>

行动中:Plunker

基本上,当字段聚焦时,字段标签应该出现。如果我在指令中注释了该范围声明,则showlabel scope变量是根范围,并且会出现BOTH标签。谢谢。

缺口

首先,您期望内部div带有属性指令的标记的功能类似于指令的模板。这将无法正常工作。

让我们在指令对象templatetemplateUrl为您的指令定义标记

return {
    //other properties
    template: '<input type="text" name="name" ng-model="model.name" placeholder="{{myPlaceholder}}" ng-click="inputClicked()"/> <label ng-show="showlabel">{{myLabel}}</label>showlabel is: {{showlabel}}',
}

接下来,设置作用域以正确使用模板,并且不要绑定到showlabel。该指令可以在其隔离范围内对其进行管理:

scope: {
  myPlaceholder: '@',
  myLabel: '@'
}

最后,让我们看看Angular文档restrict对控制其模板的指令属性要说些什么

什么时候应该使用属性而不是元素?创建由模板控制的组件时,请使用元素。常见的情况是在为模板的一部分创建特定于域的语言时。使用新功能装饰现有元素时,请使用属性。

因此,由于您的指令确实控制其模板,因此应将其限制为一个元素。

最后,您的指令javascript可能看起来像这样:

.directive('comShowLabelOnFocus', function() {
  return {
    restrict: 'E',
    scope: {
      myPlaceholder: '@',
      myLabel: '@'
    },
    template: '<input type="text" name="name" ng-model="model.name" placeholder="{{myPlaceholder}}" ng-click="inputClicked()"/> <label ng-show="showlabel">{{myLabel}}</label>showlabel is: {{showlabel}}',
    link: function(scope) {
      scope.showlabel = false;
      scope.inputClicked = function() {
        event.currentTarget.placeholder = '';
        scope.showlabel = true;
      };
    }
  }
});

像这样的标记:

<com-show-label-on-focus data-my-placeholder="Your Name" data-my-label="Name (Required)"></com-show-label-on-focus>

这是修改您的punker并演示此实现

对于所有修改,我深表歉意。起初,我误读了您的问题。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

自定义指令中的孤立范围

来自分类Dev

angular js中的自定义指令

来自分类Dev

如何在自定义Angular指令中更改ng-model范围值?

来自分类Dev

可以查看自定义指令中的范围吗?

来自分类Dev

自定义指令中范围对象内的嵌套对象

来自分类Dev

在Angular中的自定义指令中侦听鼠标事件

来自分类Dev

为什么Angular自定义指令范围会影响父控制器范围?

来自分类Dev

为什么Angular自定义指令范围会影响父控制器范围?

来自分类Dev

为Angular中的自定义指令保留的名称空间?

来自分类Dev

jstree angular指令中不同节点的自定义Contexmenu

来自分类Dev

如何在angular中创建自定义指令

来自分类Dev

如何在angular js中实现自定义指令?

来自分类Dev

多个自定义指令angularjs

来自分类Dev

自定义指令的多个实例失败

来自分类Dev

AngularJs 多个自定义指令失败

来自分类Dev

angular 2自定义指令OnInit

来自分类Dev

离子自定义指令被Angular忽略

来自分类Dev

Angular自定义指令未被调用

来自分类Dev

Angular JS reset自定义指令

来自分类Dev

从具有隔离范围的Angular指令访问自定义过滤器

来自分类Dev

Angular 自定义指令在过滤器中使用范围变量

来自分类Dev

我可以以编程方式在自定义指令中应用Angular验证指令吗?

来自分类Dev

如何在自定义指令的模板属性中定义多个元素

来自分类Dev

在Jasmine测试中获取自定义指令的控制器的范围

来自分类Dev

双向绑定隔离范围在自定义指令中不起作用-AngularJS

来自分类Dev

在Jasmine测试中获取自定义指令的控制器的范围

来自分类Dev

如何在AngularJS中实现自定义格式和输入指令(解决超越范围的问题)?

来自分类Dev

#if指令中的几个自定义配置

来自分类Dev

Vue 3中的自定义指令

Related 相关文章

  1. 1

    自定义指令中的孤立范围

  2. 2

    angular js中的自定义指令

  3. 3

    如何在自定义Angular指令中更改ng-model范围值?

  4. 4

    可以查看自定义指令中的范围吗?

  5. 5

    自定义指令中范围对象内的嵌套对象

  6. 6

    在Angular中的自定义指令中侦听鼠标事件

  7. 7

    为什么Angular自定义指令范围会影响父控制器范围?

  8. 8

    为什么Angular自定义指令范围会影响父控制器范围?

  9. 9

    为Angular中的自定义指令保留的名称空间?

  10. 10

    jstree angular指令中不同节点的自定义Contexmenu

  11. 11

    如何在angular中创建自定义指令

  12. 12

    如何在angular js中实现自定义指令?

  13. 13

    多个自定义指令angularjs

  14. 14

    自定义指令的多个实例失败

  15. 15

    AngularJs 多个自定义指令失败

  16. 16

    angular 2自定义指令OnInit

  17. 17

    离子自定义指令被Angular忽略

  18. 18

    Angular自定义指令未被调用

  19. 19

    Angular JS reset自定义指令

  20. 20

    从具有隔离范围的Angular指令访问自定义过滤器

  21. 21

    Angular 自定义指令在过滤器中使用范围变量

  22. 22

    我可以以编程方式在自定义指令中应用Angular验证指令吗?

  23. 23

    如何在自定义指令的模板属性中定义多个元素

  24. 24

    在Jasmine测试中获取自定义指令的控制器的范围

  25. 25

    双向绑定隔离范围在自定义指令中不起作用-AngularJS

  26. 26

    在Jasmine测试中获取自定义指令的控制器的范围

  27. 27

    如何在AngularJS中实现自定义格式和输入指令(解决超越范围的问题)?

  28. 28

    #if指令中的几个自定义配置

  29. 29

    Vue 3中的自定义指令

热门标签

归档