将属性从自定义指令复制到输入

拉塔塔

我有一个自定义driective,它用div包装输入并添加标签。

<my-input label="My Label" name="myname" ng-model="mymodel" ng-pattern="/^[a-z]+$/">

我想为输入使用可选的所有可能的角度指令,例如ng-pattern,ng-minlength等。现在看起来像这样:

app.directive('myInput',[function () {
    return {
        restrict: "E",
        replace: true,
        scope: {
            ngModel: '=',
            name: '@',

            ngMinlength: '=',
            ngMaxlength: '=',
            ngPattern: '@',                
            label: '@'                
        },
        compile: function(element, attrs){

            if(!_.isUndefined(attrs['ngMinlength'])) {
                element.find('input').attr('ng-minlength', 'ngMinlength');
            }
            if(!_.isUndefined(attrs['ngMaxlength'])) {
                element.find('input').attr('ng-maxlength', 'ngMaxlength');
            }                
            if(!_.isUndefined(attrs['ngPattern'])) {
                element.find('input').attr('ng-pattern', attrs['ngPattern']);
            }               


        },
        template: '<div class="form-group">'
        + '<label>{{ label | translate }}</label>'
        + '<div>'
        + '<input type="text" class="form-control input-sm" name="{{ name }}" ng-model="ngModel">'           
        + '</div></div>'
    };
}]);

问题是我想使用与输入中的ng-pattern完全相同的ng-pattern,所以我想有可能在ng-pattern中使用regexp,并在pattern($scope.mypattern = /^[a-z]+$/; ... ng-pattern="mypattern")中使用scope变量如何处理?

我都想工作:

1。

<my-input label="My Label" name="myname" ng-model="mymodel" ng-pattern="/^[a-z]+$/">

2。

$scope.myPattern = /^[a-z]+$/
...
<my-input label="My Label" name="myname" ng-model="mymodel" ng-pattern="myPattern">
弗洛里邦

我有三个答案给你。

  1. 通常,不建议同时支持模型属性和直接支持字符串。这种情况由=指令范围内声明处理,如果要传递String,则可以使用简单的引号。例如ngBind是这样工作的:ng-bind="someModel"ng-bind="'some string'"

  2. 如果确实需要,可以尝试解析表达式。如果可解析,则表示它是作用域模型。否则,可能是字符串。请参见下面的代码片段中的工作示例:

angular.module('test', [])

.controller('test', function($scope) {
  $scope.model = "string from scope model";
})

.directive('turlututu', function($parse) {
 return {
   restrict: 'E',
   scope: {},
   template: '<div class="tu">{{content}}</div>',
   link: function(scope, elem, attrs) {
     try {
       scope.content = $parse(attrs.text)(scope.$parent);
     } catch(err) {
     } finally {
       if (!scope.content) {
         scope.content = attrs.text;
       }
     }
   }
 };
});
body { font-family: monospace; }

.tu { padding: 10px; margin: 10px; background: #f5f5f5; border-bottom: 2px solid #e5e5e5; }
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="test" ng-controller="test">
  
  <turlututu text="hardcoded string"></turlututu>
  <turlututu text="model"></turlututu>
  
</div>

  1. 就ngPattern而言,由于代码的好奇心将始终为您提供帮助,因此您可以在Angular的源代码中看到他们测试属性的第一个字符:如果将/其视为则表达式,则将其视为作用域模型(请参见下面的示例)

angular.module('test', [])

.controller('test', function($scope) {
  $scope.model = /[a-z]*/;
})

.directive('turlututu', function($parse) {
 return {
   restrict: 'E',
   scope: {},
   template: '<div class="tu">{{content}}</div>',
   link: function(scope, elem, attrs) {
     if (attrs.regexp.charAt(0) === '/') {
       scope.reg = new RegExp( attrs.regexp.substring(1, attrs.regexp.length-1) );
     } else {     
       scope.reg = new RegExp( $parse(attrs.regexp)(scope.$parent) );
     }
     
     scope.content = scope.reg.toString()
   }
 };
});
body { font-family: monospace; }

.tu { padding: 10px; margin: 10px; background: #f5f5f5; border-bottom: 2px solid #e5e5e5; }
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="test" ng-controller="test">
  
  <turlututu regexp="/[0-9]*/"></turlututu>
  <turlututu regexp="model"></turlututu>
  
</div>

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

将发布元自定义字段复制到其他自定义字段

使用替换的自定义变量将文件复制到ansible主机

如何将sf :: Font复制到自定义池分配的内存中?

将文件复制到硬盘上的自定义扇区

将R图形复制到具有自定义尺寸的剪贴板

将ngModel而不是值绑定到用于货币输入的自定义Angular指令

Caffe将AlexNet的预训练权重复制到具有两个AlexNet的自定义网络

java:将Java类文件复制到自定义程序包中[版权问题?]

添加WiX自定义操作以将MSI日志文件复制到LOCALAPPDATA文件夹

将原始 *viewdefs.php 复制到自定义文件夹中?套件CRM / 糖CRM CE

流星反应性地将某些字段从用户集合复制到自定义用户配置文件集合

SQL将现有的列值复制到select语句中的自定义列中

如何创建将文本复制到剪贴板的自定义应用程序启动器?

将数据从自定义指令传递到组件

将ngModel绑定到自定义指令

将模型属性传递给自定义指令

如何将值从自定义指令传递到自定义过滤器?

如何将自定义 ObservableCollection 元素复制到另一个自定义 ObservableCollection?

计算母版上的自定义字段并将其复制到行上的自定义字段-Acumatica

自定义指令:由于它不是element的已知属性,因此无法绑定到指令

CSV复制到Postgres的使用JDBC自定义类型的阵列

将自定义列表对象复制到另一个列表对象

jQuery Datatables:自定义复制到剪贴板功能

如何使用电容器将自定义文件复制到iOS版本

具有复制到剪贴板的纯JS的自定义选择功能

将数据从自定义属性获取到输入字段

ms-project如何将资源自定义字段复制到任务自定义字段

angularjs自定义指令重复属性

自定义指令范围与属性