AngularJS将方法更改为指令
AngularJS Changing a method into Directives
大家好,
我在AngularJS中有一个小函数,用于根据用户的输入为文本字段提供不同的最大长度,代码如下
$scope.limit = '0';
$scope.textLengthFilter = function() {
var x = $scope.han.substr(0, 1);
//console.log("Show: " + x);
var numberRegex = /[0-9]/;
var alphaRegex = /^[AHK]/;
if (numberRegex.test(x)) {
$scope.limit = '7';
console.log('number' + $scope.limit);
} else if (alphaRegex.test(x)) {
$scope.limit = '8';
console.log('Alphanumber' + $scope.limit);
}
};
我的html是下面的
<input type="text" ng-model="han" ng-change="textLengthFilter()" maxlength={{limit}}>{{han}}</input>
这很有效,但我也想进一步将其作为自定义指令,但我仍然不知道如何开始自己编写自定义指令。
这里的任何人都可以指导我如何将我的函数更改为自定义指令??
考虑以下代码:
app.directive('myLimit', function(){
return {
scope: {
myLimit: '=' // this is the variable that you pass in
},
restrict: 'A', // this says you want to use this directive as an attribute
link: function(scope, element){
var defaultLimit = 7; // this can also be passed in as a variable if you like
element.attr('maxlength', defaultLimit); // set the maxlength attribute
angular.element(element).on('keyup', textLengthFilter); // bind the filter function
function textLengthFilter() {
var x = scope.myLimit.substr(0, 1);
var numberRegex = /[0-9]/;
var alphaRegex = /^[AHK]/;
// updated the maxlength attribute based on condition
if (numberRegex.test(x)) {
element.attr('maxlength', defaultLimit);
} else if (alphaRegex.test(x)) {
element.attr('maxlength', 8);
}
}
}
};
});
然后在你的模板中你做:
<input type="text" ng-model="han" my-limit="han" />
代码可以更加简洁和简化,它只是为了演示目的而显式的。问我是否有什么可以解释的。
应该是这样的:
var myApp = angular.module('myApp',[]);
myApp.directive('myDirective', function() {
return {
restrict: 'A',
link: function(scope, element, attrs) {
var limit = 0;
element.bind('change', function(e) {
var x = element.val().substr(0, 1);
var numberRegex = new RegExp(/[0-9]/);
var alphaRegex = new RegExp(/^[AHK]/);
if (numberRegex.test(x)) {
limit = 7;
console.log('number ' + limit);
} else if (alphaRegex.test(x)) {
limit = 8;
console.log('Alphanumber ' + limit);
}
element.attr('maxlength', limit);
});
}
};
});
模板:
<input type="text" my-directive></input>
PS。您的正则表达式似乎已损坏。
相关文章:
- 指令加载真的很长,检查加载时间的方法
- 在指令中绑定方法
- 显示指令时调用指令方法
- 将方法从控制器注入到未使用右变量调用的指令
- 在Angular JS中POST后重新加载指令方法
- 在嵌套递归指令中将参数传递给父控制器方法
- 如何在使用$timeout进行指令渲染后调用控制器方法
- AngularJs在调用服务方法后更新指令
- 如何从 AngularJS 指令调用 Android 方法
- 保存全局变量以供指令监视的最佳方法
- 从角度工厂或指令导出方法以供以后使用
- 将ng模型转发到指令中的元素的正确方法是什么
- jQuery插件作为指令,并在插件上调用公共方法
- AngularJS将方法更改为指令
- 正确的方法-Angular JS中指令之间的通信
- 如何从指令的控制器调用依赖注入服务的嵌套方法
- 从传入的内容调用指令方法
- 动态元素未在AngularJS上调用指令方法
- 在AngularJS中使用父指令方法的最好方法
- 了解AngularJS指令方法绑定是否默认为angular.noop